温馨提示:本文翻译自stackoverflow.com,查看原文请点击:iis - Is Chrome ignoring Cache-Control: max-age?
cache-control google-chrome iis content-expiration

iis - Chrome是否忽略Cache-Control:max-age?

发布于 2020-03-31 23:51:15

背景:

  • IIS 7
  • AspNet 3.5 Web应用程序

Chrome开发者工具列出了针对Web应用程序首页的98个请求(aspx + js + CSS +图像)。在以下请求中,状态代码适用200于CSS /图像文件。没有缓存信息,浏览器每次询问服务器是否必须更新文件。好。

在IIS 7中,我将HTTP标头设置为缓存控制,将“ ressources”文件夹设置为6小时。在Chrome中,使用开发工具,可以看到响应头设置正确:

Cache-Control: max-age=21600

但是我仍然收到98个请求...我认为如果未达到其到期日期,浏览器不应请求一个资源,并且我期望请求数量会下降...

查看更多

提问者
Francois
被浏览
245
kiewic 2017-01-29 02:43

我知道了。如果您在同一选项卡中再次请求相同URI之后(通过单击刷新按钮,按键或按+ ,则Google Chrome浏览器将忽略Cache-ControlExpires标头它可能有一种算法来猜测用户真正想要做什么。F5CommandR

测试Cache-Control标头的一种方法是返回带有自身链接的HTML文档。点击链接后,Chrome会从缓存中提供文档。例如,将以下文档命名为self.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Page</title>
</head>
<body>
    <p>
        <a href="self.html">Link to the same page.</a>
        If correctly cached, a request should not be made
        when clicking the link.
    </p>
</body>
</html>

另一种选择是复制URL并将其粘贴到同一选项卡或另一个选项卡中。

更新:在2017年1月26日发布Chrome帖子中,仅通过对主要资源而不对子资源进行重新验证来描述以前的行为以及它如何发生变化

用户通常由于页面损坏或内容陈旧而重新加载。现有的重载行为通常可以解决页面损坏的问题,但是定期重载(尤其是在移动设备上)无法有效地解决陈旧内容。此功能最初是在页面破碎非常普遍的时候设计的,因此可以同时处理两个用例是合理的。但是,随着网页质量的提高,这种最初的关注已变得不那么重要了。为了改善过时的内容用例,Chrome现在具有简化的重新加载行为,以仅验证主资源并继续进行常规页面加载。这种新行为最大限度地提高了缓存资源的重用性,并降低了延迟,功耗和数据使用量。

2017年1月26日发布Facebook帖子中,提到他们发现一段代码是Chrome在POST请求后使所有缓存的资源无效:

我们发现Chrome会重新验证通过发出POST请求而加载的页面上的所有资源。Chrome团队告诉我们这样做的理由是POST请求往往是可以进行更改的页面(例如购买或发送电子邮件),并且用户希望拥有最新的页面。

看来情况已不再如此。

最后,描述了Firefox正在引入Cache-Control: immutable以完全停止资源的重新验证:

Firefox实施了我们的一位工程师的建议,为某些资源添加了新的缓存控制标头,以告知浏览器该资源永远不要重新验证。这个标头背后的想法是,开发人员向浏览器额外承诺,该资源在其最大使用期限内将永远不会发生变化。Firefox选择以缓存控件:不可变标头的形式实现此指令。

我希望这有助于解开重装之谜。