服务器发送的事件是否使用HTTP / 2流水线

时间:2016-09-01 14:53:10

标签: server-sent-events http2 http-1.1

通过HTML5 EventSource对象使用SSE时,请求是否使用HTTP / 2多路复用/流水线功能?特别是,不同标签(重新)中的SSE请求是否会使用相同的HTTP / 2连接?

我是这么认为的,因为SSE是基于HTTP / 1.1 chunked_encoding技术的(AFAIK),但是想要检查。

2 个答案:

答案 0 :(得分: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 :(得分:1)

理论上,是的。而且,实际上答案应该是相同的,因为大多数浏览器都在|对象之上实现了SSE。

(公平地说,我还没有找到明确的参考资料,说明对同一来源的AJAX请求是在标签之间共享的,但很难想象为什么浏览器不允许这样做 - 我'例如,没有设法提出安全理由。)