:authorityhttp2 伪标头&的目的是什么:method?我感到很困惑,因为:authority&:method似乎重复了http 1.1 中的请求 URL(主机)和请求方法
与:path伪标头相比,如https://developers.google.com/web/fundamentals/performance/http2#header_compression中所述,我可以看到它可用于对其他资源的连续请求。所以我怀疑:authority也许也:method可以为此目的进行优化。但我无法弄清楚具体是怎样的。例如,如果:authority、 、:method都:path与原来的请求URL和请求方法不同,浏览器不应该发出新的请求吗?
sbo*_*det 15
HTTP/2:method伪标头相当于 HTTP/1.1 请求方法(HTTP/1.1 请求行的第一个标记)。
HTTP/2:authority伪标头是有关主机权限(即主机名和主机端口)的更严格的、强制性的信息。
在 HTTP/1.1 中,主机权限来自多个来源,甚至可能不存在,从而导致许多依赖于服务器实现的令人困惑的行为。例如,当权限采用绝对形式时,权限可以出现在 HTTP/1.1 请求目标中。
如果 HTTP/1.1 请求目标是原始形式,则通常由Host标头定义权限。但是,HTTP/1.1 请求可以采用以下形式:
GET / HTTP/1.1\r\n
Host: \r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
那里的Host领域是空的,因此没有权威。这种类型的请求并不常见,但技术上有效,并且不同的服务器实现可能会有不同的行为。
此外,权限可能会被Forwarded标头及其过时的前辈X-Forwarded-*标头覆盖,但同样具有模糊规则。
HTTP/2 伪标头的目的:authority是消除权限方面的混乱,从而实现单一来源,而不再像 HTTP/1.1 绝对形式或Host标头等那样存在多个来源。
关于优化,HTTP/2 确实可以优化信息的发送:authority,但这与伪标头的目的正交:authority。
优化(非常粗略地)以这种方式进行:当用户代理(例如浏览器)发出对页面的请求时,它很可能会向同一权限发出后续请求,以获取其他必要的辅助资源渲染页面(例如 CSS 资源、JavaScript 资源、图像等)。
HTTP/2 协议对:authority字符串进行索引,假设在 HPACK 上下文的索引 17 处,因此浏览器向服务器发送带有信息的第一个请求:authority => (17, "veryverylongdomainname.com")。
对于第二个请求,浏览器和服务器现在共享此公共信息,因此浏览器只需发送到服务器即可:authority => 17,服务器将从索引 17 中查找权限,从而节省了通过网络发送权限字符串字节的时间。此 HPACK 机制对大多数标头都有效,而不仅对伪标头有效。欲了解更多信息,请参阅HPACK 规范。
浏览器必须对每个资源发出请求。如果他们请求相同的权限,HPACK 优化可能会启动并减少网络上的字节数。
如果浏览器向不同的权限发出请求(想象一下网络蜘蛛),那么每个请求中的权限可能都不同,并且 HPACK 优化可能不会启动,因为权限总是不同的。
在最坏的情况下(权威机构总是不同的),HTTP/2 与 HTTP/1.1 一样好;但在常见情况下(具有相同权限的许多资源的网页),HTTP/2 比 HTTP/1.1 更好,因为通过网络发送的字节更少。
| 归档时间: |
|
| 查看次数: |
8776 次 |
| 最近记录: |