javascript safari eventsource

javascript - Servidor de Safari enviado evento(SSE) Infinte Loop



eventsource (0)

Tengo problemas con los eventos de envío de servidor (SSE) en Safari 9 y Safari 10. Se abre la conexión SSE, se cierra inmediatamente y luego se vuelve a conectar en un bucle infinito.

Este es el código del lado del cliente:

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

Estos son los encabezados de respuesta 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

Algunas notas adicionales:

  • Probé en Chrome y Firefox y no puedo repetir
  • Probé en Safari sin https y no puedo repetir
  • Probé en Safari con https y puedo repetir
  • Los certificados https se generan automáticamente utilizando Permite el cifrado
  • El servidor de fondo está escrito en Ir y usa http / 2 de forma predeterminada

El hecho de que solo puedo repetir en Safari con https es interesante. Por lo tanto, me pregunto si hay algún problema conocido con SSE y https, o si hay algo más que pueda estar fallando o fallando aquí.

EDITAR

He aislado el problema y he encontrado una correlación con el protocolo. Cuando el protocolo http2 está habilitado, puedo reproducir este problema. Cuando http2 está desactivado en el servidor, ya no puedo reproducir este problema.

Utilicé el siguiente parche de servidor para verificar:

--- 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"}, }, }