Respuestas:
Actualmente no es posible, consulte https://forums.aws.amazon.com/thread.jspa?threadID=162252 para obtener una discusión al respecto.
Editar: Lambda @ Edge lo ha hecho posible, ver más abajo.
Una actualización sobre esto ...
Los encabezados de respuesta HTTP ahora se pueden personalizar mediante las funciones de Lambda @ edge. Consulte http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html para obtener la documentación. Para probar esto, cree una nueva función lambda en la consola de AWS. Elija 'Edge Nodge.js 4.3' para el idioma y busque la plantilla de cabecera de modificación de frente de nube. Si hace esto, Lambda le preguntará a qué distribución y evento de CloudFront aplicar la función. Tenga en cuenta que puede editar o cambiar esto en cualquier momento accediendo a la pestaña de comportamiento de Cloudfront.
Aquí hay un ejemplo de función 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);
};
Para agregar a la respuesta de Andrew:
Acabo de probar esto y un par de notas: ya no hay un tiempo de ejecución de edgejs de edge específico, pero la lambda necesita ser creada en la región de N Virginia y activada por la respuesta de origen frente a la nube o la respuesta del espectador .
El código fuera de la caja ya no parece funcionar. Da ERR_CONTENT_DECODING_FAILED.
La solución es usar la sintaxis json de la siguiente manera:
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" } ];
Correcto, dado que Lambda @ Edge está generalmente disponible, lo restringieron a N Virginia y uno tiene que elegir el Nodo 6.10 en lugar del Nodo 4.3.
La parte relevante de nuestro código a continuación (para nuestro propósito, esta siempre será una redirección 302 permanente):
'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);
};
Al configurar diferentes comportamientos en CloudFront, puede limitar qué solicitudes llamarán a la función Lambda.