是否有某种方法可以故意强制 Perl CGI 脚本返回不带 Content-type header 的 HTTP 响应?这是为了测试查找各种格式错误的 header 的诊断爬网程序。
我得到的最接近的是:
#!/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 脚本来执行。如果这是不可能的,是否有其他方法,也许使用不同的语言/服务器/配置?
最佳答案
不可以,CGI 接口(interface)要求设置 Content-type
header ,因此任何正确实现 CGI 的 Web 服务器软件都会给出 500 - 内部服务器错误
。
您实际上必须实现自己的 HTTP 服务器(或修改一个)才能获得您想要的内容。
在 Apache 中,通过实现一些在 Apache 响应处理程序 之后运行的 mod_perl 处理程序,这可能是可能的(不确定是否存在,或者可能通过堆叠处理程序)。。 编辑:看来您应该实现一个响应过滤器。 Apache2::Filter::HTTPHeadersFixup是一个完全满足您要求的产品。
关于perl - 强制没有 Content-type 的 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103506/