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';
}
我也試過這個頭部調用,結果也是一樣。但是我認爲你打擊刷新是正確的,那可能就是這樣。謝謝! – user884248