Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Travailler avec les demandes et les réponses
Pour utiliser les requêtes et réponses Lambda @Edge, consultez les rubriques suivantes :
Rubriques
Utiliser les fonctions Lambda @Edge avec le basculement d'origine
Vous pouvez utiliser les fonctions Lambda @Edge avec des CloudFront distributions que vous avez configurées avec des groupes d'origine, par exemple, pour le basculement d'origine que vous configurez afin de garantir une haute disponibilité. Pour utiliser une fonction Lambda avec un groupe d'origine, spécifiez la fonction dans une requête d'origine ou un déclencheur de réponse de l'origine pour un groupe d'origine lorsque vous créez le comportement de cache.
Pour plus d’informations, consultez les ressources suivantes :
-
Créez des groupes d'origine : Création d'un groupe d'origine
-
Comment fonctionne le basculement d'origine avec Lambda@Edge: Utilisation du basculement d'origine avec les fonctions Lambda@Edge
Générer des HTTP réponses dans les déclencheurs de demande
Lorsque CloudFront vous recevez une demande, vous pouvez utiliser une fonction Lambda pour générer une HTTP réponse qui est CloudFront renvoyée directement au visualiseur sans transmettre la réponse à l'origine. La génération de HTTP réponses réduit la charge sur l'origine et réduit généralement le temps de latence pour le spectateur.
Parmi les scénarios courants de génération de HTTP réponses, citons les suivants :
-
Renvoi d'une petite page web à l'utilisateur
-
Renvoi d'un code d'état HTTP 301 ou 302 pour rediriger l'utilisateur vers une autre page Web
-
Renvoyer un code d'état HTTP 401 à l'utilisateur lorsque celui-ci ne s'est pas authentifié
Une fonction Lambda @Edge peut générer une HTTP réponse lorsque les CloudFront événements suivants se produisent :
- Événements de demande utilisateur
-
Lorsqu'une fonction est déclenchée par un événement de demande du spectateur, CloudFront renvoie la réponse au visualiseur sans la mettre en cache.
- Événements de demande à l'origine
-
Lorsqu'une fonction est déclenchée par un événement de demande d' CloudFront origine, recherche dans le cache périphérique une réponse précédemment générée par la fonction.
-
Si la réponse se trouve dans le cache, la fonction n'est pas exécutée et CloudFront renvoie la réponse mise en cache au visualiseur.
-
Si la réponse ne se trouve pas dans le cache, la fonction est exécutée, CloudFront renvoie la réponse au visualiseur et la met également en cache.
-
Pour voir un exemple de code permettant de générer HTTP des réponses, voirExemples de fonctions Lambda@Edge. Vous pouvez également remplacer les HTTP réponses dans les déclencheurs de réponse. Pour de plus amples informations, veuillez consulter Mettre à jour HTTP les réponses dans les déclencheurs de réponse d'origine.
Modèle de programmation
Cette section décrit le modèle de programmation permettant d'utiliser Lambda @Edge pour générer des HTTP réponses.
Objet Réponse
La réponse que vous renvoyez en tant que paramètre result
de la méthode callback
doit avoir la structure suivante (notez que seul le champ status
est requis).
const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code (string)', statusDescription: 'status description' };
L'objet de réponse peut inclure les valeurs suivantes :
body
-
Le corps, le cas échéant, que vous CloudFront souhaitez renvoyer dans la réponse générée.
bodyEncoding
-
Encodage de la valeur que vous avez spécifiée dans
body
. Les seuls encodages valides sonttext
etbase64
. Si vous incluezbody
dans l'response
objet mais que vous l'omettezbodyEncoding
, CloudFront traite le corps comme du texte.Si vous spécifiez
bodyEncoding
asbase64
mais que le corps n'est pas valide en base64, CloudFront renvoie une erreur. headers
-
En-têtes que vous CloudFront souhaitez renvoyer dans la réponse générée. Notez ce qui suit :
-
Les clés de l'
headers
objet sont des versions en minuscules des noms d'HTTPen-tête standard. L'utilisation des minuscules vous permet d'accéder aux valeurs des en-têtes sans tenir compte de la casse. -
Chaque en-tête (par exemple,
headers["accept"]
ouheaders["host"]
) est un tableau de paires clé-valeur. Pour un en-tête donné, le tableau contient une paire clé-valeur pour chaque valeur de la réponse générée. -
key
(facultatif) est le nom distinguant majuscules et minuscules de l'en-tête tel qu'il apparaît dans une HTTP demande ; par exemple,accept
ouhost
. -
Indiquez
value
comme valeur d'en-tête. -
Si vous n'incluez pas la partie clé d'en-tête de la paire clé-valeur, Lambda@Edge insère automatiquement une clé d'en-tête à l'aide du nom d'en-tête que vous fournissez. Quelle que soit la manière dont vous avez formaté le nom d'en-tête, la clé d'en-tête qui est insérée est formatée automatiquement avec une majuscule initiale pour les différentes parties séparées par des tirets (-).
Par exemple, vous pouvez ajouter un en-tête comme suit, sans clé d'en-tête :
'content-type': [{ value: 'text/html;charset=UTF-8' }]
Dans cet exemple, Lambda@Edge crée la clé d'en-tête suivante :
Content-Type
.
Pour plus d’informations sur les restrictions applicables à l’utilisation d’en-têtes, consultez Restrictions sur les fonctions périphériques.
-
status
-
Le code HTTP de statut. Entrez le code d'état sous forme de chaîne. CloudFront utilise le code d'état fourni pour les opérations suivantes :
-
Renvoi dans la réponse
-
Cache dans le cache CloudFront périphérique, lorsque la réponse a été générée par une fonction déclenchée par un événement de demande d'origine
-
Connectez-vous CloudFront Configuration et utilisation de journaux standard (journaux d'accès)
Si la
status
valeur n'est pas comprise entre 200 et 599, CloudFront renvoie une erreur au visualiseur. -
statusDescription
-
Description que vous souhaitez CloudFront renvoyer dans la réponse, pour accompagner le code HTTP d'état. Il n'est pas nécessaire d'utiliser des descriptions standard, par exemple
OK
pour un code d'HTTPétat de 200.
Erreurs
Les erreurs possibles associées HTTP aux réponses générées sont les suivantes.
La réponse contient un corps et un code de statut HTTP 204 (Pas de contenu)
-
Lorsqu'une fonction est déclenchée par une demande du visualiseur, CloudFront renvoie un code d'état HTTP 502 (Bad Gateway) au visualiseur lorsque les deux conditions suivantes sont vraies :
-
La valeur du code
status
est 204 (Pas de contenu) -
La réponse inclut une valeur pour
body
Cela est dû au fait que Lambda @Edge impose la restriction facultative trouvée dans RFC 2616, qui stipule qu'une
HTTP 204
réponse n'a pas besoin de contenir un corps de message. -
Restrictions concernant la taille de la réponse générée
-
La taille maximale d'une réponse générée par une fonction Lambda dépend de l'événement qui a déclenché la fonction :
-
Événements de demande utilisateur – 40 Ko
-
Événements de demande à l'origine – 1 Mo
Si la réponse est supérieure à la taille autorisée, CloudFront renvoie un code d'état HTTP 502 (Bad Gateway) au visualiseur.
-
Champs obligatoires
Le champ status
est obligatoire.
Tous les autres champs sont facultatifs.
Mettre à jour HTTP les réponses dans les déclencheurs de réponse d'origine
Lorsque CloudFront vous recevez une HTTP réponse du serveur d'origine, si un déclencheur de réponse d'origine est associé au comportement du cache, vous pouvez modifier la HTTP réponse pour remplacer ce qui a été renvoyé par l'origine.
Parmi les scénarios courants de mise à jour HTTP des réponses, citons les suivants :
-
Modification du statut pour définir un code d'état HTTP 200 et créer un corps de contenu statique à renvoyer au lecteur lorsqu'une origine renvoie un code d'erreur (4xx ou 5xx). Pour un exemple de code, consultez Exemple : utilisez un déclencheur de réponse d'origine pour mettre à jour le code d'état d'erreur à 200.
-
Modification du statut pour définir un code d'état HTTP 301 ou HTTP 302, afin de rediriger l'utilisateur vers un autre site Web lorsqu'une origine renvoie un code d'erreur (4xx ou 5xx). Pour un exemple de code, consultez Exemple : utilisez un déclencheur de réponse d'origine pour mettre à jour le code d'état d'erreur à 302.
Note
La fonction doit renvoyer une valeur d'état comprise entre 200
et 599
(inclus), sinon elle CloudFront renvoie une erreur au visualiseur.
Vous pouvez également remplacer les HTTP réponses dans les événements de demande d'affichage et d'origine. Pour de plus amples informations, veuillez consulter Générer des HTTP réponses dans les déclencheurs de demande.
Lorsque vous travaillez sur la HTTP réponse, Lambda @Edge n'expose pas le corps renvoyé par le serveur d'origine au déclencheur origin-response. Vous pouvez générer un corps de contenu statique en lui attribuant la valeur souhaitée, ou supprimer le corps à l'intérieur de la fonction en définissant une valeur vide. Si vous n'actualisez pas le champ du corps dans votre fonction, le corps d'origine renvoyé par le serveur d'origine est renvoyé à l'utilisateur.
Accédez au corps de la demande en choisissant l'option Inclure le corps
Vous pouvez choisir que Lambda @Edge expose le corps dans une demande de HTTP méthodes inscriptibles (POST,, PUTDELETE, etc.), afin de pouvoir y accéder dans votre fonction Lambda. Vous pouvez choisir un accès en lecture seule ou vous pouvez préciser que vous remplacerez le corps.
Pour activer cette option, choisissez Include Body lorsque vous créez un CloudFront déclencheur pour votre fonction destiné à une demande d'utilisateur ou à un événement de demande d'origine. Pour de plus amples informations, veuillez consulter Ajouter des déclencheurs pour une fonction Lambda @Edge, ou pour en savoir plus sur l'utilisation de Include Body (Inclure le corps) avec votre fonction, veuillez consulter Structure d'événement Lambda@Edge.
Les scénarios lorsque vous êtes susceptibles de vouloir utiliser cette fonction incluent les éléments suivants :
-
Traitement des formulaires Web, comme « Contactez-nous », sans renvoyer les données saisies par le client aux serveurs d'origine.
-
Collecte des données de balise web envoyées par les navigateurs des utilisateurs et traitement de ces données en périphérie.
Pour un exemple de code, consultez Exemples de fonctions Lambda@Edge.
Note
Si le corps de la demande est grand, Lambda@Edge le tronque. Pour plus d'informations sur la taille maximale et la troncature, veuillez consulter Restrictions relatives au corps de la requête avec l'option Inclure le corps.