强制没有Content-type的HTTP响应?

时间:2014-01-13 23:36:37

标签: perl http cgi

有没有办法故意强制Perl CGI脚本返回没有Content-type标头的HTTP响应?这用于测试查找各种​​格式错误的标头的诊断搜寻器。

我最接近的是:

#!/usr/bin/perl
print "Status: 200 OK\r\n";
print "Content-type:\r\n";
print "\r\n";
print "Message body goes here.\r\n";

这会产生以下响应:

HTTP/1.1 200 OK
Date: Mon, 13 Jan 2014 23:17:23 GMT
Server: Apache/2.2.14 (Ubuntu)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: 
Content-Length: 25

Message body goes here.

但是内容类型仍然是定义的,它的值只有“”。我真的需要生成一个完全没有内容类型的响应。

当我删除打印内容类型的行时:

#!/usr/bin/perl
print "Status: 200 OK\r\n";
print "\r\n";
print "Message body goes here.\r\n";

然后自动添加标题:

HTTP/1.1 200 OK
Date: Mon, 13 Jan 2014 23:19:00 GMT
Server: Apache/2.2.14 (Ubuntu)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain
Content-Length: 25

Message body goes here.

有没有办法绕过这种行为?理想情况下,我希望将此作为在正常配置的Apache服务器上运行的Perl脚本。如果那是不可能的,还有其他方法,可能使用不同的语言/服务器/配置吗?

1 个答案:

答案 0 :(得分:1)

不,CGI接口要求设置Content-type标头,因此任何正确实现CGI的Web服务器软件都将提供500 - Internal Server Error

您实际上必须实现自己的HTTP服务器(或修改一个)以获得您想要的内容。

通过实现一些在Apache Response Handler 之后运行的mod_perl处理程序(不确定是否存在,或者可能通过堆叠处理程序),可能在Apache中实现。编辑:看来你应该实现一个响应过滤器。 Apache2::Filter::HTTPHeadersFixup完全您要求的内容。