Risposte:
Al momento non è possibile, consultare https://forums.aws.amazon.com/thread.jspa?threadID=162252 per una discussione al riguardo.
Modifica: Lambda @ Edge ha reso possibile, vedi sotto.
Un aggiornamento su questo ...
Le intestazioni di risposta HTTP ora possono essere personalizzate tramite le funzioni Lambda @ edge. Per la documentazione, consultare http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html per la documentazione. Per provare questo, crea una nuova funzione lambda nella console AWS. Scegli 'Edge Nodge.js 4.3' per la lingua e cerca il modello di intestazione cloudfront-change-response-response. Se lo fai, Lambda ti chiederà a quale distribuzione ed evento CloudFront applicare la funzione. Nota che puoi modificarlo o cambiarlo in qualsiasi momento accedendo alla scheda Comportamento di Cloudfront.
Ecco un esempio della funzione lambda ...
'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);
};
Per aggiungere alla risposta di Andrew:
Ho appena provato questo e un paio di note: non esiste più un runtime nodejs Edge specifico, ma il lambda deve essere creato nella regione N Virginia e attivato dalla risposta dell'origine cloudfront o dalla risposta del visualizzatore .
Il codice non sembra funzionare più. Fornisce ERR_CONTENT_DECODING_FAILED.
La soluzione è utilizzare la sintassi json come segue:
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" } ];
Corretto, poiché Lambda @ Edge è generalmente disponibile, lo hanno limitato a N Virginia e si deve scegliere il nodo 6.10 anziché il nodo 4.3.
La parte pertinente del nostro codice di seguito (per i nostri scopi sarà sempre un reindirizzamento permanente 302):
'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);
};
Configurando comportamenti diversi su CloudFront è possibile limitare quali richieste chiameranno la funzione Lambda.