2

我正在阅读一篇关于启动 HTTP/2 的文章。据说HTTP/2是基于SPDY(speedy)协议的,通过使用“header field compression”和“multiplexing”可以提供比HTTP/1.1更快的浏览速度。这些术语究竟是如何工作的?

我是否应该相信 HTTP/1.1 中的请求是以“一个接一个”的方式处理的?

4

2 回答 2

9

多路复用

在 HTTP 1.1 中,很多时间都花在等待上。浏览器发送请求并等待响应返回,然后发送另一个 GET 等。带宽使用效率低下。有时它会使用流水线,但有时请求需要等待之前完成的请求也会受到影响。线头阻塞问题。

使用多路复用,几乎没有等待,但浏览器可以一次请求数百个内容,它们将按照可以交付的任何顺序交付,而无需单独的流或对象相互等待。(通过优先级和流量控制来帮助正确控制它们。)

这在高延迟连接上最为显着。有关它可以做什么的可见和清晰的演示,请参阅https://http2.golang.org/gophertiles?latency=1000上的 golang 的 gophertiles 演示(需要启用 HTTP/2 的浏览器)

标头压缩

此外,HTTP/2 提供标头压缩,使客户端能够在 TCP 连接生命周期的早期压缩更多请求。在新 TCP 连接的早期慢启动阶段,塞入更多请求以使响应更早返回可能很有价值。HTTP 标头本质上是极其重复的。

服务器推送

HTTP/2 服务器可以在客户端请求之前向客户端发送数据,就好像客户端请求它一样!如果服务器认为客户端也可能想要/需要它,则可以节省一半的 RTT。

于 2015-03-06T21:37:47.067 回答
1

从 HTTP/2 开始,标头和 HTTP 响应内容都可以被压缩。在 HTTP/1.1 中,标头永远不会与内容相反地压缩(由 Content-Encoding 标头指定)。

多路复用与服务器推送有关。实际上,当服务器发送一个 HTML 页面时,它可以使用相同的连接来推送额外的资源,如 css 和 javascript 文件。如果 HTML 页面需要加载这些额外的脚本,则不会再向服务器发送请求,因为它们之前已经发送过。

于 2015-02-25T13:43:13.547 回答