2009-11-05 71 views
1

我正在開發一個RESTful API,並且我寫了一個mod_perl2處理程序來處理請求。通過設置$r->status($http_code)return $http_code;如何禁止mod_perl中的默認apache錯誤文檔?

一切都與錯誤代碼

我處理的交易是很好,除了一個小問題:當我的HTTP_CODE是不同於200(例如404),阿帕奇追加一個默認的HTML錯誤文件到我的自己產生的迴應。

例如:

GET /foo 

給出:

$VAR1 = bless({ 
       'status' => 404, 
       'data' => {}, 
       'message' => 'Resource not found for foo' 
       }, 'My::Response'); 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL /foo was not found on this server.</p> 
<p>Additionally, a 404 Not Found 
error was encountered while trying to use an ErrorDocument to handle the request.</p> 
<hr> 
<address>Apache/2.0.54 (Fedora) Server at localhost Port 80</address> 
</body></html> 

如何擺脫這個阿帕奇生成的HTML?

更新:我的錯。我的mod_perl2處理程序正在返回一個HTTP_ *代碼,而不是Apache2 :: Const :: OK。

+0

當阿帕奇::常量不支持像201 HTTP狀態代碼,你會如何解決這個問題,在Apache 1.3而mod_perl 1.XX? – 2011-06-01 03:51:12

回答

1

請參閱Apache2::Response。我現在沒有時間進行實驗,但應該有效。

+0

這就是想法,但我從apache得到這個錯誤: ErrorDocument有兩個參數,更改HTTP錯誤的響應 任何意思是停用apache錯誤文檔?我不認爲這是一個問題,因爲保留了返回碼。例如,某些瀏覽器選擇顯示自己的錯誤文檔,而不是apache。 – jeje 2009-11-05 15:30:45

0

您是否在詢問如何在回覆中不發送消息正文?

如果你想要的東西不是apache要爲你做的事情,你需要自己處理請求。你的處理程序的其餘部分是什麼樣的?發佈代碼使我們不會猜測你在做什麼。

從處理程序的返回值允許或Apache知道,如果你自己處理請求,如果需要做更多的東西以您的名義。我猜你正在做後者。

0

我也在找這個。 ,唯一的辦法是相當簡單:

$r->status(HTTP_NOT_FOUND); 
$r->custom_response(404, ""); 
return OK; 

其中$ r是的Apache2 :: Response對象。