2013-04-02 48 views
1

我正在玩PHP,使用ETags,IF_NONE_MATCH等,當一個奇怪的事情發生。我編寫了下面的代碼,它檢查IF_NONE_MATCH。如果它匹配我的ETag,我發送一個304響應頭。如果沒有,我會發送其他標題告訴瀏覽器緩存頁面,以及我的ETag。 我曾期待一次獲得該頁面,然後獲得304的所有時間。相反,我得到頁面一次,然後是304,然後是頁面,然後是304等。 當我檢查Chrome的標題視圖時,我看到如果我沒有在304代碼中再次設置ETag,它不會'在下一次我得到頁面時,將它發送回請求頭文件。 這是正常行爲還是僅僅是Chrome?難道我做錯了什麼?我需要再次發送一個304 Not Modified頭的ETag嗎?

下面是代碼:

<?php 
    $etag = '89453fo245tyu5o423ty5349gu0p34'; 

    if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && 
            $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) { 
     header('', true, 304); 
    } else { 
     header('Expires: Fri, 06 Apr 2013 23:59:59 03:00 GMT'); 
     header('Pragma: cache'); 
     header('Cache-Control: public, must-revalidate, max-age=0'); 
     header('ETag: ' . $etag); 
     echo 'new page'; 
    } 

回答

1

我認爲這個問題是在你的標題號召。使用正確的標題號召,as mention in this answer,一切都應該罰款:

header('HTTP/1.1 304 Not Modified'); 

還要記住,如果您按F5鍵刷新頁面,可能是您的瀏覽器會忽略緩存,並直接到Web服務器。爲了測試,我會添加一個鏈接到同一頁面,或者只需點擊瀏覽器地址欄並按回車即可。

+0

我也試過這個頭部調用,結果也是一樣。但是我認爲你打擊刷新是正確的,那可能就是這樣。謝謝! – user884248

相關問題