我有一个缓存失效系统,所以我需要将 css|js 的缓存设置为永不过期。
我试过这个
location ~* \.(js|css)$ { # |png|jpg|jpeg|gif|ico
expires max;
#log_not_found off; # what's this for?
}
这是我在 Firebug 中看到的:
因此,如您所见,请求仍在进行,尽管它们只收到“未修改”的响应。但我想完全避免它们,这可能吗?
另外,我读到,标准规定超过 1 年的有效期将被视为无效。这是真的吗?
编辑
让我完成@DisgruntledGoat 的回答:
- 正常访问 URL,例如单击链接或在 URL 栏中输入:cache 有效,仅针对该 URL 发出 1 个请求,针对资产发出 0 个请求。
- F5 重新加载:发出了许多请求,但您收到的都是资产的“304 未修改”响应,因此未下载这些资产
- ctrl + F5 无需缓存即可重新加载:许多请求,所有“200 成功”,所有资产均再次下载。
答案1
您是否重新加载页面来测试这一点?当您这样做时,浏览器通常会再次请求每个文件(至少 Chrome 会这样做)。如果您点击网站上不同页面的链接,浏览器应该只使用缓存,而不会重新请求文件。
此外,根据规范,该Expires
指令只能使用一年后的日期,因此 2037 年是无效值。话虽如此,浏览器通常可以很好地接受遥远的未来值。
答案2
您无法通过其他方式完成此操作,请尝试。这取决于客户端浏览器如何处理缓存。设置缓存不应超过修改日期一年来源。
Nginx 非常高效,如果每天的访客数量少于 1,000,000,您真的不必担心发送到 Nginx 的请求。如果是带宽问题,如果浏览器收到 304 响应,它仍会使用缓存中的数据,因此不会浪费带宽。