Réponses:
Ce n'est actuellement pas possible, voir https://forums.aws.amazon.com/thread.jspa?threadID=162252 pour une discussion à ce sujet.
Edit: Lambda @ Edge a rendu cela possible, voir ci-dessous.
Une mise à jour à ce sujet ...
Les en-têtes de réponse HTTP peuvent désormais être personnalisés via les fonctions Lambda @ edge. Veuillez consulter http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html pour la documentation. Pour essayer cela, créez une nouvelle fonction lambda dans la console AWS. Choisissez 'Edge Nodge.js 4.3' pour la langue et recherchez le modèle d'en-tête cloudfront-modify-response-response. Si vous faites cela, Lambda vous demandera à quelle distribution CloudFront et à quel événement appliquer la fonction. Notez que vous pouvez modifier ou modifier cela à tout moment en accédant à l'onglet de comportement Cloudfront.
Voici un exemple de fonction 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);
};
Pour ajouter à la réponse d'Andrew:
Je viens d'essayer ceci et quelques notes: il n'y a plus d'exécution de nodejs de bord spécifique, mais le lambda doit être créé dans la région de Virginie du Nord et déclenché par la réponse d' origine ou la réponse du visualiseur cloudfront .
Le code sorti de la boîte ne semble plus fonctionner. Il donne ERR_CONTENT_DECODING_FAILED.
La solution consiste à utiliser la syntaxe json comme suit:
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" } ];
C'est exact, étant donné que Lambda @ Edge est généralement disponible, ils l'ont limité à N Virginia et il faut choisir le nœud 6.10 plutôt que le nœud 4.3.
La partie pertinente de notre code ci-dessous (pour notre objectif, ce sera toujours une redirection 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);
};
En configurant différents comportements sur CloudFront, vous pouvez limiter les requêtes qui appellent la fonction Lambda.