gpt4 book ai didi

caching - Post/Redirect/Get 上的整页重新加载忽略缓存控制

转载 作者:行者123 更新时间:2023-12-04 02:28:37 26 4
gpt4 key购买 nike

我有一个加载大量图像、css 和 javascript 的页面。我添加了一个 future 的 Expires header ,并将这些外部依赖项上的 Cache-Control 设置为 public,因此它们应该被缓存。但是每次我执行 Post/Redirect/Get 时,chrome 都会尝试再次加载这些。此行为与重新加载页面非常相似。我已经添加了 ETags 并处理了 If-None-Match header ,这有点帮助,但它仍然会生成太多无用的请求。

如何告诉 chrome 和 safari 从缓存中获取文件?

chrome   NOK
safari NOK
firefox OK
ie OK

另见 Full page reload on Post/Redirect/Get ignoring cache control在谷歌支持论坛上。

澄清:

我不希望浏览器请求 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)

示例:

我创建了一个简单的例子来说明这个问题。

http://crydust.be/lab/prg/

标题:

我与图像一起发送的标题是:
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

这应该使它缓存 24 小时。没有 Vary: * 或类似的东西。

更新:
这种行为现在也出现在 iOS 4 上的 Safari Mobile 中。页面加载速度的一个可怕的回归。

更新:
在 webkit bugzilla 中有一个关于这个问题的错误报告。
Bug 38690 - Submitting a POST that leads to a server redirect causes all cached items to redownload

更新:
问题在 iOS 4.0.1 上依然存在

更新:
问题在 iOS 4.1 上依然存在

更新:
问题在 iOS 4.2 上依然存在

更新:
问题在 iOS 4.2.1 上依然存在
在 Chrome 从版本 6 到 9 中。

更新:
Chromium 项目中有一个关于此问题的错误报告。 (你可以给它加星号以表示你的关心)
Issue 68621: Post/Redirect/Get ignoring cache instructions

更新:
从版本 6 到 10,Chrome 上的问题仍然存在。
它现在是一个 9 个月大的错误。

更新:
该问题已于太平洋标准时间 2011-03-21 19:33:07 解决。这反射(reflect)在 chrome 12(金丝雀)的行为中。

最佳答案

当您在 Chrome、Safari 或 IE8 中按 F5/刷新时,所有 GET 资源都会再次被请求,即使它们已被缓存。

如果您使用开发工具或 Fiddler 观察请求/响应,您会看到服务器以 HTTP 304 状态响应,但没有内容。这告诉浏览器他们不需要再次下载它并且他们可以继续使用缓存。

在 Chrome 的开发工具的“资源”选项卡中,像这样刷新的文件会有延迟时间,但下载时间为 0 毫秒。

如果您通过离开和返回来重新加载页面,您会发现这些缓存的文件不会再次检索,也不会检查服务器。

GET 静态资源的 F5/刷新的这种行为是正确的 - FX 和 IE6 做错了。它还有助于解决大多数用户不知道的令人困惑的 CTRL+F5 命令。

您不能缓存 POST 或返回临时 HTTP 重定向的页面:

POST 更改数据并且在再次发送之前应该总是提示,并且它的结果永远不会被缓存。

重定向在 HTTP 内容中的低级别处理 - 在缓存之下。实际上它告诉浏览器从其他地方获取资源,虽然它可以缓存它没有缓存重定向并需要再次检查。

您应该能够缓存 301 永久重定向,但不应缓存 302 或 303 临时重定向 according to the HTTP spec .

关于caching - Post/Redirect/Get 上的整页重新加载忽略缓存控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3004702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com