URL 是否受到 HTTP/2 header 压缩?
Is the URL subject to HTTP/2 header compression?
据我了解,如果您在后续请求中发送重复的 header 值,动态 table 使您不会再次发送该值,而是在 [=改为发送 21=]。
我的问题是这是否也适用于 URL?
假设您重复请求相同的 URL(可能包含长 ID and/or 令牌),在这种情况下会节省带宽吗?
客户端可以使用多种选项在 HPACK specification 中定义的 HTTP/2 下发送 headers。这些基本上是说是否使用以前提到的 header,是否存储 header 供以后参考,是否从不存储 header 以供重用......等等。客户端决定将其中的哪些用于它发送的 headers。
在 HTTP/2 中,URL 在 :path
pseudo-header 中发送,因此与 HTTP/1.1 不同,它与任何其他 HTTP Header 所以可以压缩。但是,通常 URL 不会经常重复,所以它会作为 Literal Header Field without Indexing
发送,这意味着这是一次性的 header,所以不要存储它以供重复使用。当然,因为它是一个 HTTP header 很像其他任何东西,所以没有什么可以阻止 HTTP/2 客户端将其作为索引类型发送,但是网络浏览器不太可能这样做,所以这可能只是真的自定义客户端的选项。
顺便说一句,如果想了解更多,并且发现规范有点难以遵循,那么我的书 HTTP/2 in Action 将在第 8 章中对此进行更详细的介绍。
据我了解,如果您在后续请求中发送重复的 header 值,动态 table 使您不会再次发送该值,而是在 [=改为发送 21=]。
我的问题是这是否也适用于 URL?
假设您重复请求相同的 URL(可能包含长 ID and/or 令牌),在这种情况下会节省带宽吗?
客户端可以使用多种选项在 HPACK specification 中定义的 HTTP/2 下发送 headers。这些基本上是说是否使用以前提到的 header,是否存储 header 供以后参考,是否从不存储 header 以供重用......等等。客户端决定将其中的哪些用于它发送的 headers。
在 HTTP/2 中,URL 在 :path
pseudo-header 中发送,因此与 HTTP/1.1 不同,它与任何其他 HTTP Header 所以可以压缩。但是,通常 URL 不会经常重复,所以它会作为 Literal Header Field without Indexing
发送,这意味着这是一次性的 header,所以不要存储它以供重复使用。当然,因为它是一个 HTTP header 很像其他任何东西,所以没有什么可以阻止 HTTP/2 客户端将其作为索引类型发送,但是网络浏览器不太可能这样做,所以这可能只是真的自定义客户端的选项。
顺便说一句,如果想了解更多,并且发现规范有点难以遵循,那么我的书 HTTP/2 in Action 将在第 8 章中对此进行更详细的介绍。