我使用nginx.conf中的以下代码缓存静态资源
http {
...
gzip on;
gzip_types *;
gzip_vary on;
...
server {
...
location /static {
alias /opt/static_root;
expires max;
}
}
}这足以设置以下http标头:
$ curl -I example.com/static/css/bootstrap.min.css
Content-Length: 97874
Last-Modified: Mon, 21 Nov 2016 18:30:33 GMT
ETag: "58333d49-17e52"
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000然而,尽管Last-Modified日期比浏览器的缓存版本晚,我仍然看到该文件的旧版本(在Firefox50.0和Chrome54.0.2840.98上进行了测试)。
如何使ETag失效,以便每当我将差异部署到静态文件时,浏览器就能理解重新加载它们?
我试过nginx -s reload,但没有用。
发布于 2016-11-21 22:11:08
当客户端发出条件请求重新验证过期资源时,将使用ETags。但是在您的例子中,资源要到2037年才会过期!在此之前,浏览器将继续从其缓存中为资源提供服务,而无需与服务器进行检查。这就是你用你的Expires头告诉它的。
通常情况下,如果您要做的事,遥远的未来到期,就像这样,您必须通过更改名称的资源版本。或者您可以将Expires更改为更短的内容,在这种情况下,当客户端尝试重新验证时将使用ETags。
https://stackoverflow.com/questions/40728492
复制相似问题