2009-04-23 116 views
2

我有一個perl生成的頁面。此頁面的內容每30分鐘更改一次,所以我將$ r-> set_last_modified()設置爲上次更改內容的時間。Apache2 mod_perl Last-Modified標頭被忽略

這一切運作良好,我可以看到正確的標題到達我的瀏覽器。

當我刷新頁面時,我看到我的瀏覽器在對服務器的請求中使用了正確的「If-Modified-Since」標頭,但Apache2忽略此並重新發送整個頁面。

如何讓Apache2正常運行並響應「HTTP/1.x 304 Not Modified」?

(「最後修飾」 /「如果 - 修改 - 因爲」請求從同一進程的Apache2靜態內容時,頭被正確的處理。)

感謝您的幫助。

編輯:我的期望錯了嗎?我是否必須顯式處理我的perl腳本中的入站If-Modified-Since標題?

回答

2

Apache在處理請求時不會存儲您最後修改的值。所以爲了決定是否修改了某些東西,它將不得不運行你的應用程序。

4

不幸的是,你的期望是錯誤的。

在你基本上對阿帕奇說「好吧,我正在處理這個請求......」的時候,阿帕奇將把一切責任交給你。如果你想讓這個請求承認If-Modified-Since,那麼這個請求就是你的代碼。

面對它,這是正確的行爲,因爲Apache無法通過Perl處理程序中的'modified'知道您/真正意義:這可能是最好的檢查是查詢您的後端數據庫一個記錄上的時間戳,例如....

+0

是的,我想這是有道理的:) – aidan 2009-04-24 13:58:17