【问题标题】:How to set nginx cache headers to never expire?如何将 nginx 缓存标头设置为永不过期?
【发布时间】:2012-08-14 12:34:30
【问题描述】:

我现在正在使用这个:

location ~* \.(js|css)$ { # |png|jpg|jpeg|gif|ico
  expires max;
  #log_not_found off; # what's this for?
}

这就是我在萤火虫中看到的:

成功了吗?如果我没记错的话,我的浏览器会再次请求文件,而 nginx 会回答“未修改”,所以我的浏览器使用缓存。但我认为浏览器甚至不应该要求文件,它已经知道它永远不会过期。

有什么想法吗?

【问题讨论】:

    标签: caching nginx http-headers


    【解决方案1】:

    不要使用 F5 重新加载页面。使用单击 url + 输入,或单击链接。这就是我只收到 1 个请求的原因。

    【讨论】:

    • 但是如何缓存文件以供 F5 或刷新按钮单击?
    【解决方案2】:

    很明显,您的文件不是陈旧的,因为它的 max-age 和到期日期仍然有效,因此浏览器不会与服务器通信。浏览器不会询问文件,除非它是陈旧的。即它的缓存控制( max -age )已经结束或到期日期已经消失。在这种情况下,它会询问发球方给定的副本是否仍然有效。如果是,它将提供相同的副本,否则它将获得新的。

    更新:

    看,事情就是这样。 F5/refresh 将始终让浏览器请求服务器,无论是否有任何修改。它将在请求标头中有 If-Modified-Since。虽然它与仅导航站点不同,但返回到浏览器不会询问服务器的页面和单击事件,并从缓存中静默加载(无服务器调用)。此外,如果您在 firefox Live HTTP Headers 上进行测试,它会准确显示请求的内容,而 Firebug 将始终显示 If-Modified-Since。 Safari 的开发者菜单应显示加载时间为 0。希望对您有所帮助。

    【讨论】:

    • 那为什么我的浏览器会发出 'GET all.css' 请求呢?我不希望浏览器检查文件是否已被修改。我想避免这种不必要的要求。这可能吗?
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2017-12-19
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2019-01-14
    相关资源
    最近更新 更多