服务器推送事件(Server-Sent Events)是否使用了HTTP/2管线化技术?

7

当使用HTML5 EventSource对象通过SSE进行请求时,这些请求会利用HTTP/2多路复用/管线化特性吗?特别是,不同标签页中的SSE请求是否会重用同一个HTTP/2连接?

我认为会,因为SSE基于(据我所知)HTTP/1.1分块编码技术,但还想确认一下。


1
HTTP/2 在传输层上运作,更接近于 TLS(确切地说,它主要是作为应用层协议协商(ALPN)扩展实现到 TLS 中),作为 HTTP 1.1 的替代品。因此,服务器推送事件与 HTTP/2 结合使用没有问题,并且应该利用流水线功能。HTTP/2 的设计目标之一是:旧的应用程序,这些应用程序被开发为使用 HTTP 1.1,应自动使用 HTTP/2 的大多数优势(但仍需进行修改以使用服务器推送)。 - Oleg
2个回答

2

是的,它们会。Chrome的http2标签是探索如何发出http2请求的好方法:chrome://net-internals/#http2。

对于由SSE发出的请求,您应该看到类似以下内容:

                HTTP2_SESSION_SEND_HEADERS
                        --> exclusive = true
                        --> fin = true
                        --> has_priority = true
                        --> :method: GET
                            :authority: h2.example.org
                            :scheme: https
                            :path: /demo_sse.php
                            accept: text/event-stream
                            cache-control: no-cache
                            referer: https://h2.example.org/
                            accept-encoding: gzip, deflate, sdch, br
                            accept-language: en-US,en;q=0.8,fr;q=0.6,es;q=0.4
                        --> parent_stream_id = 0
                        --> priority = 1
                        --> stream_id = 7

正如您在此示例中看到的那样,浏览器使用它先前建立的连接,在流ID 7上发送了请求以获取HTML,并进行了重用。

1
理论上是可以的。实际上,大多数浏览器已经在其XmlHttpRequest2对象上实现了SSE,所以答案应该是一样的。
(公正地说,我没有找到一个明确的参考资料,说明同源的AJAX请求是否在选项卡之间共享,但很难想象为什么浏览器不允许这样做 - 例如,我没有找到安全原因。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接