【问题标题】:What is the purpose of http2 pseudo-headers :authority & :method?http2伪标头:权威和:方法的目的是什么?
【发布时间】:2022-01-26 20:18:30
【问题描述】:

http2 伪标头 :authority:method 的目的是什么?我感到很困惑,因为:authority & :method 似乎重复了http 1.1中的Request URL(主机)和Request Method

:path 伪标头相比,如https://developers.google.com/web/fundamentals/performance/http2#header_compression 中所述,我可以看到它可以用于对其他资源的连续请求。所以我怀疑:authority:method 可能也是为此目的的优化。但我无法弄清楚到底是怎么回事。比如:authority:method:path都与原来的Request URL和Request Method不同,浏览器不应该发出新的请求吗?

【问题讨论】:

    标签: http2


    【解决方案1】:

    HTTP/2 :method 伪标头等效于 HTTP/1.1 请求方法(HTTP/1.1 请求行的第一个标记)。

    HTTP/2 :authority 伪标头是关于主机权限(即主机名和主机端口)的更严格、强制性的信息。
    在 HTTP/1.1 中,主机权限来自多个来源,甚至可能不存在,从而导致许多依赖于服务器实现的令人困惑的行为。 例如,当 HTTP/1.1 请求目标位于 absolute form 中时,权限可能存在于该目标中。
    如果 HTTP/1.1 请求目标在 origin form 中,则权限通常由 Host header 定义。 但是,HTTP/1.1 请求可能是这种形式:

    GET / HTTP/1.1\r\n
    Host: \r\n
    \r\n
    

    Host 字段为空,因此没有权限。这种类型的请求并不常见,但在技术上是有效的,并且不同的服务器实现可能会有不同的行为。
    此外,该权限可能会被Forwarded header 及其过时的前辈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 specification

    浏览器必须对每个资源进行请求。如果他们请求相同的权限,HPACK 优化可能会启动并减少网络上的字节数。
    如果浏览器向不同的权限发出请求(想象一个网络蜘蛛),那么每个请求中的权限可能不同,并且 HPACK 优化可能不会启动,因为权限总是不同的。
    在最坏的情况下(权威总是不同的),HTTP/2 和 HTTP/1.1 一样好;但在一般情况下(具有相同权限的许多资源的网页),HTTP/2 比 HTTP/1.1 更好,因为通过网络发送的字节更少。

    【讨论】:

    • 我忘记了 1.1 中的主机可能会被反向代理服务器覆盖!但我不知道 Host 字段可能为空。那有什么用例。我想不出来。
    猜你喜欢
    • 2021-01-03
    • 2020-08-29
    • 2010-11-21
    • 1970-01-01
    • 2015-06-21
    • 2013-03-17
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多