Warum sendet der Browser immer noch eine öffentliche Anforderung für die Cachesteuerung mit maximalem Alter?

Ich habe Amazon S3-Objekte und für jedes Objekt habe ich festgelegt

Cache-Control: public, max-age=3600000

Das sind ungefähr 41 Tage.

Und ich habe Amazon CloudFront Distribution mit Minimum TTL auch mit 3600000 eingestellt.

Dies ist die erste Anforderung nach dem Löschen des Caches.

GET /1.0.8/web-atoms.js HTTP/1.1
Host: d3bhjcyci8s9i2.cloudfront.net
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

Und Antwort ist

HTTP/1.1 200 OK
Content-Type: application/x-javascript
Content-Length: 226802
Connection: keep-alive
Date: Wed, 28 Aug 2013 10:37:38 GMT
Cache-Control: public, max-age=3600000
Last-Modified: Wed, 28 Aug 2013 10:36:42 GMT
ETag: "124752e0d85461a16e76fbdef2e84fb9"
Accept-Ranges: bytes
Server: AmazonS3
Age: 342557
Via: 1.0 6eb330235ca3971f6142a5f789cbc988.cloudfront.net (CloudFront)
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: 92Q2uDA4KizhPk4TludKpwP6Q6uEaKRV0ls9P_TIr11c8GQpTuSfhw==

Auch wenn Amazon Cache-Control eindeutig sendet, sendet Chrome immer noch eine zweite Anfrage, anstatt sie aus dem Cache zu lesen.

GET /1.0.8/web-atoms.js HTTP/1.1
Host: d3bhjcyci8s9i2.cloudfront.net
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
If-None-Match: "124752e0d85461a16e76fbdef2e84fb9"
If-Modified-Since: Wed, 28 Aug 2013 10:36:42 GMT

Frage: Warum macht Chrom eine zweite Anfrage?

Läuft ab Dieses Verhalten ändert sich, wenn ich ein explizites Expires-Attribut in die Header einfüge. Der Browser sendet keine nachfolgende Anforderung für den Expires-Header, aber für die öffentliche Cache-Steuerung sendet er sie. Meine S3-Objekte werden sich nie ändern, sie sind unveränderlich. Wenn wir die Datei ändern, setzen wir sie als neues Objekt mit neuer URL ein.

In-Page-Skriptreferenz Chrome stellt nachfolgende Anfragen nur manchmal. Ich habe diesen Test durchgeführt, indem ich die URL tatsächlich in den Browser eingegeben habe. Wenn ein Skript von einer HTML-Seite referenziert wird, lädt Chrome für einige nachfolgende Anforderungen zwischengespeicherte Skripte, sendet sie jedoch gelegentlich erneut eine Anforderung an den Server. Hier gibt es kein Problem mit der Festplattengröße. Chrome verfügt über ausreichend Cache-Speicher.

Das Problem ist, dass wir für jede Anfrage eine Gebühr erhalten und S3-Objekte für immer zwischengespeichert werden sollen. Sie sollten aus dem Cache geladen werden und sich niemals wieder mit dem Server verbinden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage