Antworten:
Eine Diskussion darüber finden Sie derzeit nicht unter https://forums.aws.amazon.com/thread.jspa?threadID=162252 .
Bearbeiten: Lambda @ Edge hat es möglich gemacht, siehe unten.
Ein Update dazu ...
HTTP-Antwortheader können jetzt über Lambda @ edge-Funktionen angepasst werden. Die Dokumentation finden Sie unter http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html . Erstellen Sie dazu eine neue Lambda-Funktion in der AWS-Konsole. Wählen Sie 'Edge Nodge.js 4.3' als Sprache und suchen Sie nach der Vorlage für den Cloudfront-Modify-Response-Header. In diesem Fall werden Sie von Lambda gefragt, auf welche CloudFront-Distribution und welches Ereignis die Funktion angewendet werden soll. Beachten Sie, dass Sie dies jederzeit bearbeiten oder ändern können, indem Sie zur Registerkarte Cloudfront-Verhalten wechseln.
Hier ist ein Beispiel für eine Lambda-Funktion ...
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';
callback(null, response);
};
Um Andrews Antwort zu ergänzen:
Ich habe dies und ein paar Anmerkungen gerade ausprobiert: Es gibt keine spezifische Laufzeit für Edge Nodejs mehr, aber das Lambda muss in der Region N Virginia erstellt und durch Cloudfront- Ursprungsantwort oder Viewer-Antwort ausgelöst werden .
Der sofort einsatzbereite Code scheint nicht mehr zu funktionieren. Es gibt ERR_CONTENT_DECODING_FAILED.
Die Lösung besteht darin, die JSON-Syntax wie folgt zu verwenden:
response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options'] = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];
Richtig, da Lambda @ Edge allgemein verfügbar ist, haben sie es auf N Virginia beschränkt und man muss Knoten 6.10 anstelle von Knoten 4.3 wählen.
Der relevante Teil unseres Codes unten (für unseren Zweck ist dies immer eine permanente 302-Weiterleitung):
'use strict';
exports.handler = (event, context, callback) => {
var request = event.Records[0].cf.request;
const response = {
status: '302',
statusDescription: '302 Found',
httpVersion: request.httpVersion,
headers: {
Location: [
{
"key":"Location",
"value":"someURL"
}
],
'Strict-Transport-Security': [
{
"key":"Strict-Transport-Security",
"value":'max-age=63072000; includeSubDomains; preload'
}
],
},
};
callback(null, response);
};
Durch Konfigurieren verschiedener Verhaltensweisen in CloudFront können Sie einschränken, welche Anforderungen die Lambda-Funktion aufrufen.