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?
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.
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
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.