2012-09-05 10 views
8

據Firebug的,這裏的響應頭在第一時間資源檢索:爲什麼Firefox不發送If-Modified-Since頭文件?

Accept-Ranges bytes 
Cache-Control public, max-age=86400 
Content-Language en 
Content-Length 232 
Content-Location http://localhost/myapp/cacheTest.html 
Content-Type text/html; charset=WINDOWS-1252 
Date Wed, 05 Sep 2012 15:59:31 GMT 
Last-Modified Tue, 01 May 2012 05:00:00 GMT 
Server Restlet-Framework/2.0.3 
Vary Accept-Charset, Accept-Encoding, Accept-Language, Accept 

我點擊一下,然後點擊後面,這裏有被髮送到服務器的請求頭:

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Connection keep-alive 
Host localhost 
Referer http://localhost/myapp/cacheTest2.html 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0 

因此,當然,服務器不能像我想要的那樣發送304,而是再次發送整個資源。

這發生在Firefox 14中,我認爲這可能是一個錯誤,所以我升級了。但它仍然在Firefox 15中發生。Chrome沒有問題。

我已經嘗試過和沒有「過期」標題,它沒有區別。 Firefox只拒絕發送If-Modified-Since標頭。

+0

FWIW,在Firefox中,如果響應設置爲VARY的任何請求標頭被更改,Firefox將不會發送If-Modified-Since標頭,理由是服務器可能會誤解它並返回一個304而不評估變化的請求標題。 – EricLaw

回答

32

好吧,我覺得自己像一個doofus但決定把我的驕傲一邊,而不是僅僅刪除這個問題,告訴什麼解決辦法是萬一別人做過同樣的事情...

仙界一段時間,爲了測試某些東西,我已經關閉了Firefox中的緩存。我重新打開了它,現在它正在發送標題。

+3

我會給你一個誠實的贊成:) –

+2

+1剛纔有同樣的「問題」 –

+0

從我也+1,出於同樣的原因:) –

2

對我來說,問題原來是我發送的回覆中的日期並不完全是RFC 1123. Chrome並不介意;它很高興地將我格式不正確的時間戳發送回If-Modified-Since標題。然而,Firefox卻悄悄地忽略了它。

我可以從你的標題看到這不是你的情況的原因,但我無論如何發佈這個答案,因爲它花了一段時間,我意識到這是問題,也許,有一天,某人否則會有同樣的問題。

這是在Linux下,FWIW(確切地說是17號),但我希望兩種瀏覽器在其他操作系統下的行爲方式都是一樣的。

0

如果磁盤已滿,可能導致firefox無法緩存請求的另一個原因是。至少在OSX上。

這是非常令人費解的,因爲那時safari仍然正確緩存了請求,而firefox至少可以緩存內存中的請求。

清除緩存並使磁盤上的空間有所幫助。

相關問題