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

标签 perl http cgi

是否有某种方法可以故意强制 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/

相关文章:

perl - 如何从 Perl 访问 INI 文件?

PNG 的 IDAT block 上的 PHP shell

python - 如何告诉cgi停止等待

regex - Perl、sed 或 awk 单行更改文件格式

mysql - 如何通过表中的 "numeric"位置选择列?

ios - 将 UIImage 和文本发送到服务器

php - 为什么 curl 说所有带有 http 的网站都可用?

java - HTTP 请求处理程序连接重置错误

apache - 如何以非扩展依赖的方式在 htaccess 中禁用 cgi?

python - 我的第一个网络应用程序 (Python) : use CGI, 还是像 Django 这样的框架?