2014-01-13 80 views
2

有沒有某種方法可以故意強制Perl CGI腳本返回沒有Content-type頭部的HTTP響應?這是爲了測試一個查找各種格式不正確標題的診斷爬蟲。強制使用沒有內容類型的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

不,CGI接口要求設置Content-type標頭,所以任何實現CGI的web服務器軟件都會給出500 - Internal Server Error

你實際上必須實現你自己的HTTP服務器(或修改一個)才能得到你想要的。

在Apache中實現某些在Apache響應處理程序 (不確定存在或可能通過堆棧處理程序)之後運行的mod_perl處理程序,這可能是可能的。 編輯:看來你應該實現一個響應過濾器。 Apache2::Filter::HTTPHeadersFixup是一個確實你所要求的。

+0

謝謝。這個過濾器很好地解決了這個問題,它看起來會解決一些我已經放棄的與測試有關的其他問題。這就像是瑞士軍刀,用於模擬服務器問題。 – plasticinsect

相關問題