web-dev-qa-db-fra.com

Configurer les en-têtes de réponse CORS sur AWS Lambda?

J'essaie de créer un nouveau service à l'aide d'AWS API Gateway, mais j'ai découvert que le navigateur appelle automatiquement la méthode OPTIONS afin d'obtenir des informations CORS.

Le problème est qu'AWS API Gateway n'offre pas de méthode native pour configurer les en-têtes CORS.

Est-il possible de créer un script Lambda afin de répondre à la méthode OPTIONS?

12
Alessandro Oliveira

Si vous utilisez {proxy+} endpoint, vous devez gérer les requêtes HTTP CORS dans la fonction Lambda. L'implémentation dépend du framework que vous utilisez. Pour Express, la solution la plus simple consiste à simplement utiliser middleware Express CORS .

Si vous ne souhaitez pas gérer les demandes CORS par Lambda, essayez de modifier les paramètres de votre Lambda Method pour gérer CORS sur le API Gateway niveau.

Voici un tutoriel officiel détaillé pour configuration CORS sur AWS API Gateway .

Il est également essentiel que vous autorisiez l'en-tête X-Api-Key dans Access-Control-Allow-Headers sinon, l'authentification ne fonctionnera pas et vous obtiendrez des erreurs.

EDIT: En novembre 2015, l'équipe API Gateway a ajouté une nouvelle fonctionnalité pour simplifier la configuration de CORS.

6
kixorz

Si le proxy lambda est activé, vous devez définir manuellement les en-têtes CORS:

module.exports.hello = function(event, context, callback) {

    const response = {
      statusCode: 200,
      headers: {
        "Access-Control-Allow-Origin" : "*", // Required for CORS support to work
        "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
      },
      body: JSON.stringify({ "message": "Hello World!" })
    };

    callback(null, response);
};

https://serverless.com/framework/docs/providers/aws/events/apigateway#enabling-cors

25
sqren

Si vous utilisez JQuery $ .ajax, il enverra le X-Requested-With avec le POST suivant la demande OPTIONS, vous devez donc vous assurer lors de la configuration de votre contrôle d'accès OPTIONS -accept-headers sur l'AWS API pour inclure cet en-tête: X-Requested-With avec les autres.

1
jomamaxx