http - WebKit 是否缓存第三方资源?

标签 http caching webkit

在 Chrome 和 Safari 中,尽管服务器返回了适当的信息,但我的网站上包含的远程图像似乎从未被请求使用缓存友好的 header (If-Modified-Since 等)。另一方面,使用这些 header 请求本地资源。相比之下,Firefox 使用缓存友好的 header 请求远程资源。

虽然我不认为它是 S3 独有的,但它适用于 S3 上的图像......

更新:这是我通过 Chrome 资源面板看到的实际请求。

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

请求 header

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

响应 header

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

重复请求不会导致 Chrome(以及如前所述的 Safari)发送任何额外的 header 。相比之下,在 Firefox 中快速刷新会给我带来以下好处:

Status: 304 Not Modified

响应 header

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

请求 header

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 正在缓存内容。奇怪...我要结束这个问题并给马克答案。

最佳答案

如果服务器发回一个稍远的“过期” header ,那么浏览器可能会认为内容在其缓存中仍然足够新鲜,并且他们甚至不需要发出请求到服务器。您可能需要查看从服务器发回的 header 并确保将它们设置为合理的值。参见 ETag vs Header Expires了解更多信息。请随时使用从服务器发回的实际 URL 或 header 更新您的问题。

关于http - WebKit 是否缓存第三方资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131698/

相关文章:

php - 处理缺少/错误键入的 GET 变量的最佳做法?

javascript - $http put v create - 每个(JavaScript)中从 .success() 返回的数据对象之间有什么区别

java - 浏览器关闭时 Servlet 长处理取消

entity-framework - Memcached 可以用作 Entity Framework 6 的第二层缓存吗?

iOS Webkit 无法在设备上运行,但可以快速在模拟器上运行

java - 更改 servlet header 并重定向到过滤器中的其他 url

azure - 使用 azure CDN 缓存 picsum 图像

node.js - 特拉维斯 CI 缓存 : ignore specific folder/file from cache

javascript - RSpec/Capybara 检查未触发 onChange 事件

objective-c - 如何从 WebView 访问页面的 DOM 树?