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。) –