【发布时间】:2018-11-01 05:27:07
【问题描述】:
我了解,如果您在后续请求中发送重复的标头值,动态表会这样做,因此您不会再次发送该值,而是发送表中对它的引用。
我的问题是这是否也适用于 URL?
假设您对同一个 URL 重复请求(可能包含长 ID 和/或令牌),在这种情况下会节省带宽吗?
【问题讨论】:
标签: http-headers http2
我了解,如果您在后续请求中发送重复的标头值,动态表会这样做,因此您不会再次发送该值,而是发送表中对它的引用。
我的问题是这是否也适用于 URL?
假设您对同一个 URL 重复请求(可能包含长 ID 和/或令牌),在这种情况下会节省带宽吗?
【问题讨论】:
标签: http-headers http2
客户端可以使用多种选项在HPACK specification 中定义的 HTTP/2 下发送标头。这些基本上说明是否使用先前引用的标头,是否存储标头以供以后参考,是否永远不存储标头以供重用......等等。客户端决定将其中哪些用于它发送的标头。
在 HTTP/2 中,URL 在 :path 伪标头中发送,因此与 HTTP/1.1 不同,它与任何其他 HTTP 标头一样,因此可以被压缩。然而,通常一个 URL 不会经常重复,所以它会作为 Literal Header Field without Indexing 发送,这意味着这是一个一次性的标头,所以不要存储它以供重复使用。当然,由于它是一个 HTTP 标头,与任何其他标头非常相似,因此没有什么可以阻止 HTTP/2 客户端将其作为索引类型发送,但 Web 浏览器不太可能这样做,因此这可能只是自定义客户端的一个选项。
顺便说一句,如果想了解更多,并且发现规范有点难以遵循,那么我的书 HTTP/2 in Action 将在第 8 章中更详细地介绍这一点。
【讨论】: