2010-06-28 44 views
1

在Chrome和Safari中,儘管服務器返回了適當的信息,但我的網站上包含的遠程圖像似乎從未得到緩存友好標頭(If-Modified-Since等)的請求。另一方面,使用這些標題請求本地資源。相比之下,Firefox使用緩存友好的頭文件來請求遠程資源。WebKit緩存第三方資源?

這是在S3上的圖像,儘管我不認爲這是唯一的S3 ...

更新:下面是我通過Chrome的資源面板看到實際的請求。

Request URL:http://mobtest.s3.amazonaws.com/4MKHZL-114.png 
Request Method:GET 
Status Code:200 OK 

請求頭

Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Cache-Control:max-age=0 
Referer:http://mobtest.s3.amazonaws.com/4MKHZL-114.png 
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4 

響應頭

Cache-Control:public, max-age=86400 
Content-Length:4074 
Content-Type:image/png 
Date:Wed, 30 Jun 2010 12:15:42 GMT 
ETag:"7e4739d5527ada6bb327f1e27ee656ef" 
Last-Modified:Tue, 29 Jun 2010 13:40:08 GMT 
Server:AmazonS3 
x-amz-id-2:MKTS28Zu4zTsWFjXUTzvmRY214TO9LTKTxtgW1psWKa/JY2pnwmO9rxs8fyHd/O/ 
x-amz-request-id:F6047ADD0FD6D885 
x-amz-version-id:O2OTsDbU4uKOwze7rbK_Do39U_Xhpnyp 

重複請求不導致通過瀏覽器發送的任何附加頭(並如前文所述,蘋果瀏覽器)。相反,在Firefox的快速刷新給了我下面的:

Status: 304 Not Modified 

響應頭

x-amz-id-2 IbhwfAP7FhIN7jtn2FrsjOkVZ8sIKJjv5llevKgw04y2xM+29GSFdGyQNXjiBaMY 
x-amz-request-id 258F30A4CC2AC870 
Date Wed, 30 Jun 2010 12:19:55 GMT 
Cache-Control public, max-age=86400 
Last-Modified Tue, 29 Jun 2010 13:40:08 GMT 
x-amz-version-id O2OTsDbU4uKOwze7rbK_Do39U_Xhpnyp 
Etag "7e4739d5527ada6bb327f1e27ee656ef" 
Content-Type image/png 
Content-Length 4074 
Server AmazonS3 

請求頭

Host mobtest.s3.amazonaws.com 
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 300 
Connection keep-alive 
If-Modified-Since Tue, 29 Jun 2010 13:40:08 GMT 
If-None-Match "7e4739d5527ada6bb327f1e27ee656ef" 
Cache-Control max-age=0 

更新2:現在我明白了Chrome緩存內容。奇怪......我要結束這個問題並給Marc一個答案。

回答

1

如果服務器發回的「Expires」頭有點遠,那麼瀏覽器可能會判定內容在緩存中仍然足夠新鮮,並且他們甚至不需要做出請求到服務器。您可能需要查看從服務器發回的標題,並確保它們設置爲合理的值。有關更多信息,請參見ETag vs Header Expires。隨意使用從服務器發回的實際URL或標題更新您的問題。

+0

謝謝Marc,但我相信Chrome實際上是在提出額外的要求。我已經在Chrome和Firefox中更新了我的原始問題,請求響應週期。 – pr1001 2010-06-30 12:26:00

+0

這很奇怪 - 看起來Chrome甚至沒有在第二個請求中發送「If-Modified-Since」或「If-None-Match」標頭 - 這將保證服務器再次發送文件。您的Chrome配置是否設置爲默認值? – 2010-06-30 16:27:54

+0

今天它決定發送它們......我唯一的猜測就是它必須與我的'max-age'指令有關,而且我最後一次在'max-age'時間範圍內訪問了該網站。 – pr1001 2010-07-02 08:01:01