Nis*_*ant 7 networking http http2
对于网站来说,http/2 比 http 好得多。如果您必须进行多个 http 调用,这非常有帮助。但是单次通话有什么显着的好处吗?
有一般考虑和具体考虑。
一般考虑因素是,HTTP/2 作为一种二进制协议,比 HTTP/1.1 更容易实现,并且极端情况也少得多。例如,HTTP/1.1 标头需要在不预先知道标头名称长度和标头值长度的情况下进行解析。
另一个例子是 HTTP/1.1 解析器是否需要支持标头中过时的行折叠。
HTTP/1.1 标头解析中还有许多其他极端情况,这些情况增加了 HTTP/1.1 解析器的额外复杂性,而 HTTP/2 中则没有这些复杂性,因为它是二进制协议并且依赖于 HPack。
至于具体的考虑,有两种情况:同时触发连接打开的请求,以及在已经打开的连接上发出的请求。
在第一种情况下,HTTP/2 相对于 HTTP/1.1 需要进行额外的处理。
TCP 连接打开和 TLS 握手不在考虑范围内(它们对于 HTTP/1.1 和 HTTP/2 是相同的),HTTP/2 需要在第一个请求之前发送一个前言(服务器必须回复该前言),这需要一个一点点额外的处理。
客户序言和请求可以一起发送;否则,请求会产生额外的往返延迟,等待前言回复。
在连接上的第一个请求时,HTTP/2 没有 HPPack 状态,因此需要构建。HTTP/1.1 每次都必须从头开始解析标头(逐个字符)。我没有数据,但我认为 HTTP/2 在这方面稍有优势。
第二种情况,在已经打开的连接上发送请求,可能有利于 HTTP/2,因为 HPack 现在已经“缓存”了很多标头,因此它们的解析基本上减少为只是查找 - 而对于HTTP/1.1 必须对所有请求一遍又一遍地进行标头解析。这也意味着后续的 HTTP/2 请求比相应的 HTTP/1.1 请求小得多:约 400 字节的 HTTP/1.1 请求被压缩为约 10 字节的 HTTP/2 请求。
对于单个请求,这种减少不会发挥重要作用,因为两个请求都适合单个 MTU;然而,当发送许多请求时,游戏可能会发生变化。
数据下载(从服务器到客户端)对于 HTTP/2 具有轻微的开销,因为每个DATA帧都有 9 个八位字节的开销,而 HTTP/1.1 中可能不存在这种开销(对于已知内容长度的下载)。最小开销通常为 16 KiB 数据(默认 HTTP/2 最大帧大小)中的 9 个字节。HTTP/2 中的数据下载也受到流量控制,如果客户端不够智能/快而无法WINDOW_UPDATE向服务器发送帧,则可能会停止数据下载。
最后一个考虑因素是将数据上传到服务器的请求。服务器配置为扩大会话和流控制窗口很重要,因为默认值非常小,并且会严重损害数据上传性能。
总之,我不认为对于通过网络的单个请求有“显着”的好处。
例如,在Jetty中(免责声明,我是提交者),因此在 Java 中,在我的笔记本电脑上请求处理的时间约为 10 到 100 微秒。
也许存在 HTTP/1.1 或 HTTP/2 快或慢几微秒的差异,但这将被网络延迟完全消除,因此您不会看到使用 HTTP/1.1 发出的请求与使用 HTTP/1.1 发出的请求之间有任何差异。就响应时间而言,是用 HTTP/2 制作的。
当您说“HTTP 请求”时,您可能会遇到很多变量,因此您必须对特定请求进行基准测试才能获得答案,并且如果您改变请求,如果您改变请求数量,如果您改变请求的数量,则该答案可能会有所不同。改变请求是否有内容、改变响应内容长度等。
| 归档时间: | 
 | 
| 查看次数: | 1728 次 | 
| 最近记录: |