2010-06-28 53 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