我如何查看 web reqest/response 是否使用 QUIC and/or HTTP/2?

How do I see if web reqest/response uses QUIC and/or HTTP/2?

我正在尝试使用 HTTP/2、HTTP1.1、QUIC 和 TCP 在 Chromium 中进行一些测试。我想尝试不同的协议组合。不过,我在浏览器中遇到了一些非常奇怪的行为。当我想尝试 HTTP1.1+QUIC 时,我用以下命令启动浏览器:

chromium-browser --disable-http2 --enable-quic

而且我可以在 chrome://net-internals/ 看到 HTTP2 被禁用并且 QUIC 被启用。但是,当我向支持 HTTP2 和 QUIC 的服务器发出 Web 请求时,我得到以下信息:

为什么在 chrome://net-internals/ 如此明确地说 http2 enabled: false 时会说使用 HTTP/2?

我之前在 运行 HTTP1.1 中用 QUIC 成功过。 QUIC 是否已更新为仅适用于 HTTP/2?或者 'Protocol' 字段是否显示了错误的协议?

如果其他人成功使用带有 HTTP1.1 的 QUIC,我很乐意

非常感谢!

QUIC 仅适用于 HTTP/2,对 HTTP/1.1.

没有意义

HTTP/1.1 在其一个 TCP 连接上一次发送一个请求。浏整体。所以 HTTP/1.1 有一个 Head of Line (HOL) blocking problem,因为缓慢或延迟的响应会阻塞连接,因此它不能用于可以响应的资源。

HTTP/2 是一个二进制的 multiplexed 协议,这基本上意味着请求和响应被分成可以在单个 TCP 连接上发送并混合的数据包。这很好,因为 TCP 连接在 Internet 上相对昂贵,因为需要时间来建立 TCP 连接,可能在此基础上设置 HTTPS,然后建立 TCP 慢速启动速率限制 window最佳尺寸。因此 HTTP/2 能够通过一个 TCP 连接发送和接收多个 HTTP 请求和响应是一项巨大的改进,并在 HTTP 级别解决了 HOL 阻塞问题。

不幸的是,HOL 阻塞问题已从 HTTP 层转移到 TCP 层。 TCP 是一种有保证的协议 - 如果单个 TCP 数据包丢失,那么它是 re-requested 并且整个连接等待丢失的数据包回来。这很棒,因为更高级别的协议(如 HTTP)可以在此基础上构建,而不必担心检查片段是否成功或顺序是否正确——TCP 会负责这一点。这样做的缺点是像 HTTP/2 这样的协议可能不需要这种严格的保证级别。如果服务器同时在一个连接上发送 6 HTTP/2 响应,并且一个 TCP 数据包被丢弃,它只会针对其中一个响应 - 理论上可以继续发送其他 5 个,然后进行处理由浏览器。但是 TCP 禁止这样做。

所以 QUIC 的目标是通过用基于 UDP 的协议替换 TCP 部分来解决这个问题,该协议保证在流级别而不是连接级别交付。这本可以通过增强 TCP 来完成,但它已嵌入到许多服务器、客户端、操作系统、网络基础设施等中,因此在 UDP 上构建更容易。最终从中吸取的教训可能会被纳入 TCP。在那之前,QUIC 允许快速实验和创新,因为 UDP 非常非常轻,并且对它的任何添加(例如交付保证)基本上都是在 user-space 领域而不是无法升级的较低级别内部实现的。 QUIC 最终可能会用于 HTTP 以外的协议,但目前这是它的主要用例。

所以 QUIC 有效地取代了 TCP 部分,但它还需要更改 HTTP/2 的较低级别部分,这意味着它还需要实现 TLS 之间的部分。解释它位置的最佳图表是这张图表(取自 this presentation):

I have previously been successful in running HTTP1.1 with QUIC.

我对此深表怀疑。根据上面的解释,QUIC 仅在 HTTP/2 这样的多路复用协议上才有意义。也许 Chrome 曾经称它为 QUIC 而不是 HTTP/2 + QUIC,但它总是使用 HTTP/2(或其类似的前身 SPDY)。

另外 HTTP/2 实际上只改变了消息在网络上的发送方式。在更高层次上,Web 开发人员和用户使用的它通常与 HTTP/1.1 具有相同的动词(GET、POST...等)和 HTTP [=64] =](大部分)。因此,由于 QUIC 只是改进了那些 HTTP/2 消息在网络上的发送方式,而不是更高级别的“HTTP”协议,因此讨论或衡量 HTTP/1.1 在 QUIC 上的表现确实没有意义(如果它确实存在)将不同于 HTTP/2 over QUIC - 因为 HTTP/1.1 over QUIC 基本上会变成 HTTP/2 over QUIC.

最后当 QUIC 完成标准化(相对于 non-standard Google QUIC 版本通常称为 gQUIC),它将使用 HTTP/2 which will be called HTTP/3 的修改版本.目前浏览器将仅使用 gQUIC 和 HTTP/2.

如果您想快速测试,请前往 https://http3.is

fastly创建的测试网站