代码之家  ›  专栏  ›  技术社区  ›  Qiulang

http2伪头:authority&:method的用途是什么?

  •  0
  • Qiulang  · 技术社区  · 3 年前

    http2伪头的目的是什么 :authority & :method ? 我感到困惑,因为 :权威 & :方法 似乎在重复 请求URL (主持人)和 请求方法 在http 1.1中

    与…相比 :path 伪标题,如中所述 https://developers.google.com/web/fundamentals/performance/http2#header_compression 我可以看到它可以用于其他资源的连续请求。所以我怀疑 :权威 & :方法 也许这也是一种优化。但我不知道到底是怎么回事。例如,如果 :权威 , :方法 :路径 都不同于原来的请求URL和请求方法,浏览器不应该发出新的请求吗?

    0 回复  |  直到 3 年前
        1
  •  1
  •   sbordet    3 年前

    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
    

    在哪里 主办 字段为空,因此没有权限。这种类型的请求并不常见,但在技术上有效,不同的服务器实现可能表现不同。
    此外,管理局可能会被 Forwarded header 及其过时的前辈 X-Forwarded-* 标题,但同样使用模糊规则。

    HTTP/2的目的 :权威 pseudo header是为了消除关于权限的混淆,这样就只有一个源,而不再有多个源,比如HTTP/1.1绝对格式或 主办 标题等。

    关于优化,HTTP/2确实可以优化 :权威 信息,但这与 :权威 伪标题。
    优化工作(非常粗略地)是这样的:当一个用户代理(比如浏览器)请求一个页面时,它很可能会向同一机构发出后续请求,请求呈现页面所需的其他辅助资源(例如CSS资源、JavaScript资源、图像等)。
    HTTP/2协议为 :权威 字符串,比方说在HPACK上下文的索引17处,因此浏览器向服务器发送第一个包含信息的请求 :authority => (17, "veryverylongdomainname.com") .
    对于第二个请求,浏览器和服务器现在共享此公共信息,因此浏览器可以直接发送到服务器 :authority => 17 ,服务器将从索引17中查找权限,并通过网络保存权限字符串字节的发送。 这种HPACK机制适用于大多数报头,而不仅仅适用于伪报头。有关更多信息,请参阅 HPACK specification .

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