当客户端省略 accept-encoding 标头时返回压缩数据

当客户端省略 accept-encoding 标头时返回压缩数据

在里面HTTP 1.1 标准,其中规定“如果请求中没有 Accept-Encoding 字段,则任何内容编码都会被用户代理视为可接受。”

这意味着,如果省略 accept-encoding 字段,服务器可以返回 gzip 编码的响应主体。

然而在实践中,似乎大多数常用的服务器(例如 Apache、nginx)不会这样做,如果省略该字段,则会发送未压缩的响应。

更通俗的说法是只使用客户端明确建议的编码,这样说公平吗?这似乎是一种更合乎逻辑的做法 —— 让客户端提供它可以处理的编码列表 —— 尽管这违反了标准。

答案1

即使不Accept-Encoding存在标头,也不认为任何编码都是可接受的。缺乏其他指导,不压缩是一种常见的选择。节省工作量,规范明确允许。

如果表现形式没有内容编码,则默认是可以接受的,除非 Accept-Encoding 字段明确排除,指出“identity;q=0”或“*;q=0”,而没有更具体的“identity”条目。

或者,当未提供时,Accept-Encoding实现可以通过某种算法选择它想要的任何东西。跳过内容协商存在轻微的风险,即客户端不知道如何处理编码。就我个人而言,我愿意这样做,Content-Encoding: zstd但截至 2022 年,这在用户代理中并不常见。

相关内容