Hintergrund
Ich hoste eine statische Site auf S3, wobei CloudFront über der Spitze steht. Ich habe ein Problem mit meinen HTML-Dateien.
Laut CloudFronts FAQ :
Amazon CloudFront verwendet diese Cachesteuerungsheader, um zu bestimmen, wie oft der Ursprung einer aktualisierten Version dieser Datei überprüft werden muss
Was ich bisher gemacht habe
Aus diesem Grund habe ich die HTML-Dateien in meinem S3-Bucket so eingestellt, dass sie die folgenden Header enthalten:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Bei meinem ersten Aufruf von my samplefile.htm
werden die folgenden Antwort-Header angezeigt (offensichtliche Header (z. B. Content-Type
) wurden ausgeschlossen , um auf den Punkt zu kommen:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront
Wie Sie sehen können, ist mein Cache-Control
Header dort. Wenn ich diese Datei aktualisiere und aktualisiere, erhalte ich den zwischengespeicherten Inhalt (und nicht die neueste Datei) und kann anhand der Antwortheader feststellen, dass CloudFront die zwischengespeicherte Version bereitstellt:
X-Cache:Hit from cloudfront
Zusammenfassung / Frage
Wie kann ich vor dem Hintergrund des oben Gesagten bei Verwendung von CloudFront das automatische Abrufen des neuesten HTML-Codes erreichen?
Laut FAQ sollte es mir möglich sein, dies mit Cache-Control-Headern zu tun, aber ich scheine nicht in der Lage zu sein, dies zum Laufen zu bringen.
Befolgen Sie die Antworten unten
Am Ende entschied ich mich, meinen WWW-CNAME so zu ändern, dass er direkt auf meinen S3-Bucket verweist. Dann wurde ein neuer CNAME mit dem Namen "static" hinzugefügt, der auf CloudFront verweist.
Dies bedeutet, dass HTML direkt aus S3 stammt, dessen CSS / JS / IMG-Referenzen auf static.mydomain.com verweisen
quelle
The minimum expiration time CloudFront supports is 0 seconds for web distributions and 3600 seconds for RTMP distributions.
docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…Ich glaube, die bisherigen Antworten sind veraltet, obwohl sie zu diesem Zeitpunkt korrekt waren, da Cloudfront jetzt eine TTL von mindestens 0 unterstützt und der ursprüngliche Versuch des OP, cache-age = 0 zu verwenden, nun funktionieren sollte.
Sie sollten sich überlegen, ob Sie diese anderen Cache-Control-Header verwenden möchten, um festzustellen, ob sie das gewünschte Ergebnis liefern. Möglicherweise benötigen Sie nur das Höchstalter. Sie möchten wahrscheinlich, dass Cloudfront S3 überprüft, um festzustellen, ob sich die HTML-Datei geändert hat. Ist dies der Fall, kann Cloudfront die neue Datei abrufen und zurückgeben. Andernfalls kann der Client aus dem vorhandenen Cache bedient werden (S3-Bandbreite wird gespart und der Client wird schneller und lokaler bedient).
Der Sinn von Cloudfront ist es, zwischengespeicherten Inhalt bereitzustellen, ja, aber jetzt umfasst dies auch Inhalt, der sich manchmal ändert, der jedoch zwischengespeichert werden kann, wenn er sich nicht geändert hat.
Ps-Abfragezeichenfolgen funktionieren jetzt auch in Cloudfront (wenn Sie ein "Verhalten" für den jeweiligen Ursprung konfigurieren - eine weitere neue Funktion). Einige Proxys können jedoch möglicherweise keine Dateien mit Abfragezeichenfolgen zwischenspeichern.
Amazon Developer Guide: Ablauf 1
quelle
Sie sind sich nicht sicher, wie CloudFront den Header so behandelt, wie Sie ihn haben. Wenn Sie jedoch keine Header angeben, beträgt die Standardzeit zum Aktualisieren der Objekte 24 Stunden.
Sie können die Objekte unter anderem aktualisieren, indem Sie den Inhalt ungültig machen. Schauen Sie sich den Link unten an, um weitere Informationen zu erhalten. http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html
quelle