javascript - सफारी सर्वर सेंटेड इवेंट(एसएसई) इन्फिनेट लूप



safari eventsource (0)

मुझे सफ़ारी 9 और सफ़ारी 10 में सर्वर-प्रेषण ईवेंट (एसएसई) के साथ समस्याएं हो रही हैं। एसएसई कनेक्शन खुलता है, तत्काल बंद हो जाता है और फिर अनंत लूप में फिर से कनेक्ट हो जाता है।

यह ग्राहक पक्ष कोड है:

var events = new EventSource("/stream/events")

ये http प्रतिसाद हैडर हैं:

> GET /stream/events HTTP/1.1
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Cache-Control: no-cache
< Connection: keep-alive
< Content-Type: text/event-stream
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Last-Modified: Tue, 19 Sep 2017 05:28:22 GMT
< Strict-Transport-Security: max-age=31536000
< X-Accel-Buffering: no
< X-Content-Type-Options: nosniff
< X-Frame-Options: DENY
< X-Xss-Protection: 1; mode=block
< Date: Tue, 19 Sep 2017 05:28:22 GMT
< Transfer-Encoding: chunked

कुछ अतिरिक्त नोट्स:

  • मैं क्रोम और फ़ायरफ़ॉक्स में परीक्षण किया और दोहरा नहीं सकता
  • मैं बिना सफारी के सफारी में परीक्षण किया और दोहरा नहीं सकता
  • मैं सफारी में https के साथ परीक्षण किया और फिर दोहरा सकता हूं
  • Https प्रमाणपत्र स्वचालित एनक्रिप्ट का उपयोग करके स्वचालित रूप से उत्पन्न होते हैं
  • बैकएंड सर्वर गो में लिखा गया है और डिफ़ॉल्ट रूप से http / 2 का उपयोग करता है

तथ्य यह है कि मैं केवल सफारी में https के साथ दोहरा सकता है दिलचस्प है इसलिए मैं सोच रहा हूं कि अगर एसएसई और एचटीटीपी के साथ कोई ज्ञात मुद्दे हैं, या अगर कुछ भी है तो मुझे गलत तरीके से कॉन्फ़िगर या अनुपलब्ध हो सकता है।

संपादित करें

मैंने इस समस्या को अलग कर दिया है और प्रोटोकॉल को सहसंबंध पाया है। जब http2 प्रोटोकॉल सक्षम किया गया है, मैं इस समस्या को पुन: उत्पन्न करने में सक्षम हूं। जब सर्वर पर http2 अक्षम होता है, तब मैं इस समस्या को पुन: उत्पन्न करने में सक्षम नहीं हूं।

मैं सत्यापित करने के लिए निम्नलिखित सर्वर पैच का इस्तेमाल किया:

--- before.go   2017-09-19 13:31:45.668891000 -0400
+++ after.go    2017-09-19 13:31:55.100891000 -0400
@@ -2,6 +2,6 @@
            Addr: ":443",
            TLSConfig: &tls.Config{
                GetCertificate: manager.GetCertificate,
-               NextProtos:     []string{"h2", "http/1.1"},
+               NextProtos:     []string{"http/1.1"},
            },
        }