ich statische Ressourcen bin das Caching in den folgenden Code mit meinem nginx.conf
:nginx ETag Ungültigkeits
http {
...
gzip on;
gzip_types *;
gzip_vary on;
...
server {
...
location /static {
alias /opt/static_root;
expires max;
}
}
}
Dies ist ausreichend, um die folgenden HTTP-Header zu setzen:
$ 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
Doch obwohl die Last-Modified
Datum ist später als die zwischengespeicherte Version des Browsers, ich sehe immer noch die alte Version der Datei (getestet auf Firefox 50.0 und Chrome 54.0.2840.98).
Wie kann ich das ETag ungültig machen, so dass der Browser, wenn ich Diffs in meine statischen Dateien implementiere, versteht, sie neu zu laden?
Ich habe versucht nginx -s reload
, vergeblich.
Ok, also gibt es derzeit keinen Mechanismus, der den sha1-Hash bei jeder Anfrage sendet, um zu entscheiden, ob er ein Asset erneut herunterladen soll, und nur herunterladen, wenn sich der Hashwert geändert hat? – user14717
@NickThompson: Sicher, Sie können das tun, indem Sie die Ressource sofort ablaufen lassen. In diesem Fall sendet der Browser die entsprechenden Header für eine bedingte Anfrage, und der Server wird den ETag verwenden, um festzustellen, ob sich die Ressource geändert hat oder nicht. (FYI, es sieht so aus (http://serverfault.com/a/690374) nginx verwendet keine Hashes, um ETags zu bestimmen.) –