【问题标题】:Apache2: Change response headersApache2:更改响应标头
【发布时间】:2013-11-14 08:33:13
【问题描述】:

我在我的 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,则正确计算 Content-Length。
在 RFC2616 中,第 9.4 节描述了 HEAD 请求应该与响应 GET 请求而发送的信息相同。
有人可以解释一下这种行为吗?!

【问题讨论】:

    标签: http-headers apache2 apache2-module


    【解决方案1】:

    Apache2 在实际交付内容时总是从头开始计算内容长度。如果您使用 PHP 更改该标头,您将遇到相同的行为。这对于确保 Content-Length 与服务器应用后发送的内容的长度相匹配是必要的,例如压缩(如果 mod_deflate 处于活动状态)。

    因此,在任何发送内容的请求中,您对该标头的更改都将无效。但是由于 Apache 甚至不查看 head-request 中的内容(只有元数据),所以它不计算内容长度。这是有效的,因为 HEAD 请求没有任何正文,因此内容长度始终为零。

    因此,您应该:
    a) 首先不要修改 content-length 标头
    b) 不为 HEAD 请求发送一个

    【讨论】:

    • 当您说“首先不要修改内容长度标头”时,您是什么意思?您的意思是我通常不应该修改 Content-Length 标头吗?我试图更改服务器标头只是为了查看它是否有效,但它虽然没有效果。是否可以更改现有的 http 响应标头(我不想讨论为什么这样做有意义)?
    • 正是我的意思,是的。网络服务器应该能够自行计算内容长度。对于内容长度,Apache(不确定其他软件的行为可能会有所不同)总是这样做(因为对于 HTTP 传输来说,标头与发送的正文的大小相匹配是至关重要的,尤其是在分块编码的情况下),所以你根本不能覆盖该特定标题。
    猜你喜欢
    • 2017-01-10
    • 2014-04-14
    • 2012-11-13
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多