Respostas:
No momento, não é possível, consulte https://forums.aws.amazon.com/thread.jspa?threadID=162252 para obter uma discussão sobre isso.
Edit: Lambda @ Edge tornou possível, veja abaixo.
Uma atualização sobre isso ...
Os cabeçalhos de resposta HTTP agora podem ser personalizados através das funções Lambda @ edge. Consulte http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html para obter a documentação. Para tentar isso, crie uma nova função lambda no console da AWS. Escolha 'Edge Nodge.js 4.3' para o idioma e procure o modelo cloudfront-modify-response-header. Se você fizer isso, o Lambda perguntará a que distribuição e evento do CloudFront aplicar a função. Observe que você pode editar ou alterar isso a qualquer momento, acessando a guia de comportamento do Cloudfront.
Aqui está um exemplo da função 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 adicionar à resposta de Andrew:
Eu apenas tentei isso e algumas notas: Não há mais tempo de execução específico do nodejs de borda, mas o lambda precisa ser criado na região da Virgínia do Norte e acionado pela resposta de origem ou resposta do visualizador da nuvem .
O código pronto para uso não parece mais funcionar. Dá ERR_CONTENT_DECODING_FAILED.
A solução é usar a sintaxe json da seguinte maneira:
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" } ];
Correto, como o Lambda @ Edge está geralmente disponível, eles o restringem ao N Virginia e é preciso escolher o Nó 6.10 em vez do Nó 4.3.
A parte relevante do nosso código abaixo (para nosso objetivo, sempre será um redirecionamento 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);
};
Ao configurar comportamentos diferentes no CloudFront, você pode limitar quais solicitações chamarão a função Lambda.