Kri*_*nck 11 safari caching webkit google-chrome post-redirect-get
我有一个页面加载了很多图像,CSS和JavaScript.我已经添加了一个远期的Expires头,并在这些外部依赖项上将Cache-Control设置为public,因此它们应该被缓存.但是每次我执行Post/Redirect/Get chrome都会尝试再次加载它们.此行为与重新加载页面非常相似.我已经添加了ETag并处理了If-None-Match标头,它有点帮助,但它仍然会产生太多无用的请求.
如何告诉chrome和safari从缓存中获取文件?
chrome NOK
safari NOK
firefox OK
ie OK
Run Code Online (Sandbox Code Playgroud)
另请参阅Google支持论坛上发布/重定向/获取忽略缓存控制的完整页面重新加载.
澄清:
我不希望浏览器请求image1.png两次.它应该被缓存.
200 GET page1.html
200 GET image1.png (Cache-Control: public, Expires and ETag)
302 POST action.asp (form submitted from page1.html, redirects)
200 GET page2.html
304 GET image1.png (If-None-Match)
Run Code Online (Sandbox Code Playgroud)
例:
我已经创建了一个简单的例子来说明问题.
头:
我随图像发送的标题是:
HTTP/1.1 200 OK
Date: Fri, 18 Jun 2010 11:30:22 GMT
Server: Apache
Cache-Control: public, max-age=86400
Expires: Sat, 19 Jun 2010 11:30:24 GMT
Etag: "123"
Content-Length: 866
Content-Type: image/png
Run Code Online (Sandbox Code Playgroud)
哪个应该让它缓存24小时.没有变化:*或类似的东西.
更新: 此行为现在也出现在iOS 4上的Safari Mobile中.页面加载速度的可怕回归.
更新: webkit bugzilla中有关于此问题的错误报告. 错误38690 - 提交导致服务器重定向的POST会导致重新下载所有缓存的项目
更新: 问题在iOS 4.0.1上仍然存在
更新: 问题在iOS 4.1上仍然存在
更新: 问题在iOS 4.2上仍然存在
更新: 问题在iOS 4.2.1和Chrome版本6至9中仍然存在.
更新: Chromium项目中有关于此问题的错误报告.(你可以将它标记为显示你关心) 问题68621:发布/重定向/获取忽略缓存指令
更新: Chrome从版本6到10仍然存在问题.现在是一个9个月大的bug.
更新: 问题已于2011-03-21 19:33:07太平洋标准时修复.这反映在铬12(金丝雀)的行为上.
当您在 Chrome、Safari 或 IE8 中按 F5/刷新时,所有 GET 资源都会再次请求,即使它们已被缓存。
如果您使用开发工具或 Fiddler 观察请求/响应,您将看到服务器以 HTTP 304 状态进行响应,但没有任何内容。这告诉浏览器他们不需要再次下载并且可以继续使用缓存。
在Chrome的开发工具的资源选项卡中,这样刷新的文件会有延迟时间,但下载时间为0毫秒。
如果您通过离开并返回来重新加载页面,您会发现这些缓存的文件不会再次检索,并且不会检查服务器。
F5/刷新 GET 静态资源的这种行为是正确的 - FX 和 IE6 做错了。它还有助于解决大多数用户不知道的令人困惑的 CTRL+F5 命令。
您无法缓存 POST 或返回临时 HTTP 重定向的页面:
POST 更改数据,并且在再次发送之前应始终进行提示,并且其结果永远不会被缓存。
重定向在 HTTP 内容中的较低级别进行处理 - 低于缓存。实际上,它告诉浏览器从其他地方获取资源,虽然它可以缓存,但它尚未缓存重定向,需要再次检查。
您应该能够缓存 301 永久重定向,但根据 HTTP 规范,不应缓存 302 或 303 临时重定向。
| 归档时间: |
|
| 查看次数: |
4655 次 |
| 最近记录: |