Safari服务器发送事件(SSE)无限循环

问题描述 投票:4回答:1

我在Safari 9和Safari 10中遇到服务器发送事件(SSE)的问题。SSE连接打开,立即关闭,然后在无限循环中重新连接。

这是客户端代码:

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

一些补充说明:

  • 我在Chrome和Firefox中进行了测试,无法重复
  • 我在Safari中测试过没有https,无法重复
  • 我在Safari中测试过使用https,并且可以重复
  • https证书是使用Lets Encrypt自动生成的>>
  • 后端服务器是用Go编写的,默认情况下使用http / 2
  • 我只能在Safari中使用https重复这一事实很有趣。因此,我想知道SSE和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"},
            },
        }

我在Safari 9和Safari 10中遇到服务器发送事件(SSE)的问题。SSE连接打开,立即关闭,然后无限循环重新连接。这是客户端代码:var ...

javascript safari eventsource
1个回答
0
投票

我打赌Safari Javascript控制台充满了:

© www.soinside.com 2019 - 2024. All rights reserved.