0
我缓存使用下面的代码的静态资源在我nginx.conf
:nginx的ETag的失效
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
日期比浏览器的缓存版本晚,我仍然看到该文件的旧版本(在Firefox 50.0和Chrome 54.0.2840.98上测试过)。
如何使ETag失效,以便每当我将差异部署到我的静态文件时,浏览器都能理解重新加载它们?我试过nginx -s reload
,无济于事。
好的,所以目前还没有机制可以(比如说)发送sha1哈希每个请求来决定是否重新下载一个资源,只有当哈希已经改变时才下载? – user14717
@NickThompson:当然,你可以通过设置资源立即过期。在这种情况下,浏览器将为条件请求发送适当的头文件,服务器将使用ETag来确定资源是否已更改。 (仅供参考,它[看起来像](http://serverfault.com/a/690374)nginx不使用散列来确定ETags。) –