Génération de réponses HTTP dans les déclencheurs de demande - Amazon CloudFront

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.

Génération de réponses HTTP dans les déclencheurs de demande

Lorsque CloudFront vous recevez une demande, vous pouvez utiliser une fonction Lambda pour générer une réponse HTTP qui est CloudFront renvoyée directement au visualiseur sans transmettre la réponse à l'origine. La génération de réponses HTTP réduit la charge sur le serveur d'origine, et aussi généralement la latence pour l'utilisateur.

Les scénarios courants pour générer des réponses HTTP sont les suivants :

  • Renvoi d'une petite page web à l'utilisateur

  • Renvoi d'un code de statut HTTP 301 ou 302 pour rediriger l'utilisateur vers une autre page web

  • Renvoi d'un code de statut HTTP 401 lorsque l'utilisateur ne s'est pas authentifié

Une fonction Lambda @Edge peut générer une réponse HTTP 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 des réponses HTTP, consultez Exemples de fonctions Lambda@Edge. Vous pouvez également remplacer les réponses HTTP dans les déclencheurs de réponse. Pour de plus amples informations, veuillez consulter Mise à jour des réponses HTTP dans des déclencheurs de réponse de l'origine.

Modèle de programmation

Cette section décrit le modèle de programmation permettant d'utiliser Lambda@Edge pour générer des réponses HTTP.

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 sont text et base64. Si vous incluez body dans l'responseobjet mais que vous l'omettezbodyEncoding, CloudFront traite le corps comme du texte.

Si vous spécifiez bodyEncoding as base64 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 figurant dans l'objet headers sont les versions en minuscules des noms d'en-têtes HTTP 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"] ou headers["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 de l'en-tête sensible à la casse tel qu'il s'affiche dans une demande HTTP, par exemple, accept ou host.

  • 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 d'état HTTP . Fournissez le code d'état sous forme de chaîne. CloudFront utilise le code d'état fourni pour les opérations suivantes :

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 d'état HTTP. Vous n'avez pas besoin d'utiliser de descriptions standard, telles que OK pour un code de statut HTTP 200.

Erreurs

Voici des erreurs possibles pour les réponses HTTP générées.

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 d'affichage, 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 vient du fait que Lambda@Edge impose la restriction facultative incluse dans la RFC 2616, qui stipule qu'une réponse HTTP 204 n'a pas besoin d'inclure de 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.