Ich habe einige Seiten in Google aufgerufen, auf denen Sie die Kopfzeile in S3 für einzelne Objekte festlegen können. Dies ist wirklich keine produktive Methode, da es sich in meinem Fall um mehrere Objekte handelt.
Nun, "produktiv" oder nicht, so ist es eigentlich konzipiert, um zu funktionieren.
Cloudfront nicht hinzufügen Cache-Control:
Header.
Cloudfront gelangt Durch (und auch Hinsicht, wenn nicht anders konfiguriert) die Cache-Control:
durch den Ursprungsserver bereitgestellt Headern, die in diesem Fall ist , S3.
Damit Cache-Control:
von S3 beim Abrufen eines Objekts Header bereitgestellt werden, müssen diese beim Hochladen des Objekts in S3 bereitgestellt oder durch eine nachfolgende Operation put + copy zu den Metadaten des Objekts hinzugefügt werden, mit der ein Objekt intern in sich selbst kopiert werden kann S3, Ändern der Metadaten im Prozess. Dies macht die Konsole im Hintergrund, wenn Sie Objektmetadaten bearbeiten.
Es gibt auch (falls Sie sich fragen) keine globale Einstellung in S3, mit der alle Objekte in einem Bucket gezwungen werden, diese Header zurückzugeben - es handelt sich um ein Objektattribut.
Update: Lambda @ Edge ist eine neue Funktion in CloudFront , mit der Sie Trigger für Anforderungen und / oder Antworten zwischen Viewer und Cache und / oder Cache und Ursprung auslösen können, indem Sie in Node.js geschriebenen Code für eine einfache Anforderungs- / Antwortobjektstruktur ausführen von CloudFront ausgesetzt.
Eine der Hauptanwendungen für diese Funktion ist das Manipulieren von Headern. Während die obigen Cache-Control
Angaben noch korrekt sind - CloudFront selbst fügt sie nicht hinzu - ist es jetzt für eine Lambda-Funktion möglich, sie zu der von CloudFront zurückgegebenen Antwort hinzuzufügen.
Dieses Beispiel wird Cache-Control: public, max-age=86400
nur hinzugefügt , wenn Cache-Control
in der Antwort noch kein Header vorhanden ist.
Wenn Sie diesen Code in einem Origin Response-Trigger verwenden, wird er jedes Mal ausgelöst, wenn CloudFront ein Objekt aus dem Ursprung abruft und die Antwort ändert, bevor CloudFront sie zwischenspeichert.
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
if(!response.headers['cache-control'])
{
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'public, max-age=86400'
}];
}
callback(null, response);
};
Update (20.06.2018): Vor kurzem habe ich eine Feature-Anfrage an das CloudFront-Team gesendet, um die Konfiguration von Antwort- Headern statischen Ursprungs als Ursprungsattribute zu ermöglichen, ähnlich wie statische Anforderungs- Header jetzt hinzugefügt werden können ... aber mit einem twist, so dass jeder zu konfigurierende Header bedingt hinzugefügt werden kann (nur wenn der Ursprung diesen Header nicht in der Antwort angegeben hat) oder unbedingt (Hinzufügen des Headers und Überschreiben des Headers ab dem Ursprung, falls vorhanden).
Bei Funktionsanfragen erhalten Sie normalerweise keine Bestätigung darüber, ob sie tatsächlich die Implementierung der neuen Funktion in Betracht ziehen oder ob sie möglicherweise bereits daran gearbeitet haben. Es wird nur angekündigt, wenn sie fertig sind. Ich habe also keine Ahnung, ob diese implementiert werden. Es muss argumentiert werden, dass diese Funktion in der Basisfunktionalität nicht erforderlich ist, da sie bereits über Lambda @ Edge verfügbar ist. Mein Gegenargument lautet jedoch, dass die Basisfunktionalität ohne diese Funktion nicht vollständig ist Führen Sie eine einfache Manipulation des Headers für statische Antworten durch. Wenn dies der einzige Grund ist, warum ein Trigger erforderlich ist, sind Lambda-Trigger aus finanzieller und latenter Sicht unnötig teuer (auch wenn beides nicht zwangsläufig ein ungewöhnlicher Aufwand ist).