【问题标题】:How can I *prevent* Apache2 from setting the Content-Type header?如何*防止* Apache2 设置 Content-Type 标头?
【发布时间】:2011-01-26 13:54:39
【问题描述】:

我有一个在标准输出上打印以下内容的 CGI 脚本:

print "Status: 302 Redirect\n";
print "Server: Apache-Coyote/1.1\n";
print "Location: $redirect\n";
print "Content-Length: 0\n";
print "Date: $date\n\n";

其中 $redirect 和 $date 是合理的值。 Apache2 实际发送的内容还包括一个 Content-Type: 标头(文本/纯文本)。我已经在服务器配置文件中注释掉了 DefaultType。

我正在尝试调试未发送 Content-Type: 标头时出现的下游问题。那么我必须执行什么魔法来防止 Apache2 添加内容类型标头?

【问题讨论】:

    标签: apache http header content-type


    【解决方案1】:

    根据我对 server/protocol.c 和 server/core.c 的(诚然简短的)阅读,您不能。

    如果该标题不存在,它始终默认为 DefaultType(默认为 text/plain)。

    【讨论】:

    • 啊。叽。我想我必须设置一些其他 Web 服务器才能调试我的客户端。 (我正在尝试修复一个错误报告,该报告说如果服务器根本不发送 Content-Type,我的代码就会崩溃。)
    • CGI 会在命令行上运行吗?或许只是从 inetd 中运行上面的脚本?
    • Netcat 是你的朋友。让它监听一个端口并从文件中推回你想要的内容。无需在 inetd 中运行。
    【解决方案2】:

    即使我们通过“Header unset Content-Type”指令从请求中删除 Content-Type 标头,apache 也会从请求结构的另一个字段中重新生成 Content-Type 标头。因此,我们首先将其他字段强制为保留值,以防止标题重新生成,然后我们通过“Header unset”指令删除 Content-Type。

    对于 apache2.2:

    Header set Content-Type none
    Header unset Content-Type
    

    对于 apache2.4:

    Header set Content-Type ""
    Header unset Content-Type
    

    【讨论】:

      【解决方案3】:

      RemoveType 将停止与资源一起发送内容类型。

      附录

      <Files defaulttypenone.txt>
      DefaultType None 
      </Files>
      <Files removetype.txt>
      RemoveType .txt
      </Files>
      <Files forcetype.txt>
      ForceType None
      </Files>
      

      在我自己的服务器上测试,这三种解决方案都没有奏效。他们都返回 text/plain。

      【讨论】:

      • DefaultType None RemoveType .txt ForceType None 在我自己的服务器上测试,这三个解决方案都没有奏效。他们都返回了 text/plain。
      【解决方案4】:

      如果您只想在服务器端准备一个非常具体的测试用例,您总是可以通过在文本文件中预烘焙输出并让 netcat 侦听某个端口上的连接来“作弊”。

      当我想 100% 确定服务器发送的每个字节时,我会使用该技巧。

      【讨论】:

        【解决方案5】:

        你可以试试这个指令:

        ResponseHeader unset Content-Type
        

        【讨论】:

        • 不,虽然我可以使用 header add 来添加新的 header(所以我知道正在执行 header 处理), header unset content-type 没有效果。
        【解决方案6】:

        当我读到the Apache docs in question 时,你真正想要的可能是

        Header unset Content-Type
        

        希望这样做!

        【讨论】:

        • 不,那没用。我认为 ResponseHeader 成为 Apache2 中的 Header。
        猜你喜欢
        • 1970-01-01
        • 2013-12-10
        • 2015-05-05
        • 2011-01-04
        • 2019-04-19
        • 2010-10-12
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多