我如何*阻止* Apache2设置Content-Type标头?

时间:2010-03-11 20:51:33

标签: apache http header content-type

我有一个CGI脚本,可以在stdout上打印以下内容:

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:标头(text / plain)。我在服务器配置文件中注释掉了DefaultType。

我正在尝试调试在没有发送Content-Type:标头时出现的下游问题。那么我必须执行什么神奇的咒语来阻止 Apache2添加内容类型标题?

6 个答案:

答案 0 :(得分:3)

根据我(不可否认的简短)读取server / protocol.c和server / core.c,你不能。

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

答案 1 :(得分: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

答案 2 :(得分:1)

RemoveType将停止使用资源发送内容类型。

附录

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

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

答案 3 :(得分:1)

如果你要做的就是准备一个非常具体的测试用例服务器端,你总是可以通过在文本文件中预先烘焙输出并让netcat监听某个端口上的连接来“欺骗”。

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

答案 4 :(得分:0)

您可以尝试使用该指令:

ResponseHeader unset Content-Type

答案 5 :(得分:0)

当我阅读the Apache docs in question时,您想要的实际上可能是

Header unset Content-Type

希望这样做!