服务器发送的事件是否使用 HTTP/2 流水线
Does Server-Sent Events Utilise HTTP/2 Pipelining
通过 HTML5 EventSource 对象使用 SSE 时,请求是否利用了 HTTP/2 多路复用/流水线功能?特别是,不同选项卡中的 SSE 请求是否会(重新)使用相同的 HTTP/2 连接?
我假设是这样,因为 SSE 基于(AFAIK)HTTP/1。1 chunked_encoding 技术,但想检查一下。
理论上是的。而且,实际上答案应该是相同的,因为大多数浏览器都在其 XmlHttpRequest2
对象之上实现了 SSE。
(公平地说,我还没有找到明确的参考文献表明 AJAX 对同一来源的请求在选项卡之间共享,但很难想象为什么浏览器不允许这样做 -例如,我还没想出安全理由。)
是的,他们会的。 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。
通过 HTML5 EventSource 对象使用 SSE 时,请求是否利用了 HTTP/2 多路复用/流水线功能?特别是,不同选项卡中的 SSE 请求是否会(重新)使用相同的 HTTP/2 连接?
我假设是这样,因为 SSE 基于(AFAIK)HTTP/1。1 chunked_encoding 技术,但想检查一下。
理论上是的。而且,实际上答案应该是相同的,因为大多数浏览器都在其 XmlHttpRequest2
对象之上实现了 SSE。
(公平地说,我还没有找到明确的参考文献表明 AJAX 对同一来源的请求在选项卡之间共享,但很难想象为什么浏览器不允许这样做 -例如,我还没想出安全理由。)
是的,他们会的。 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。