我在我的ubuntu 12.04系统apache2上运行,并玩弄响应标头。我想更改 http 响应标头的行为,尤其是 Content-Length 标头。我尝试在 IfModule mod_headers.c 部分的 apache2.conf 中添加以下行:
Header set Static-Header "Static Content with nonsense"
Header set Content-Length "1338"
如果我运行 curl -I localhost,我会得到预期的标头字段 Content-Length: 1338(curl -I 执行 HEAD 请求)。
如果我运行 curl -i,则正确计算内容长度。
在RFC2616中,第 9.4 节描述了 HEAD 请求应该与响应 GET 请求时发送的信息相同。
有人可以解释我的这种行为吗?!
Apache2 在实际交付内容时总是从头开始计算内容长度。如果使用 PHP 更改该标头,您将体验到相同的行为。这是确保内容长度与服务器应用(例如压缩(如果mod_deflate处于活动状态)后发送的内容长度匹配所必需的。
因此,在任何发送内容的请求中,对该标头的更改都将无效。但是由于 Apache 甚至不查看头部请求中的内容(仅查看元数据),因此它不会计算内容长度。这是有效的,因为 HEAD 请求没有任何正文,因此内容长度始终为零。
因此,您应该:
a) 首先
不修改内容长度标头b) 不发送一个 HEAD 请求