有没有办法故意强制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脚本。如果那是不可能的,还有其他方法,可能使用不同的语言/服务器/配置吗?
答案 0 :(得分:1)
不,CGI接口要求设置Content-type
标头,因此任何正确实现CGI的Web服务器软件都将提供500 - Internal Server Error
。
您实际上必须实现自己的HTTP服务器(或修改一个)以获得您想要的内容。
通过实现一些在Apache Response Handler 之后运行的mod_perl处理程序(不确定是否存在,或者可能通过堆叠处理程序),可能在Apache中实现。。 编辑:看来你应该实现一个响应过滤器。 Apache2::Filter::HTTPHeadersFixup是完全您要求的内容。