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.
Si vous utilisez la fonction API Gateway Import API (API d’importation API Gateway), vous pouvez configurer la prise en charge de CORS à l’aide d’un fichier OpenAPI. Vous devez d’abord définir une méthode OPTIONS
dans votre ressource, qui renvoie les en-têtes requis.
Note
Les navigateurs Web s'attendent Access-Control-Allow-Headers à ce que Access-Control-Allow-Origin des en-têtes soient configurés dans chaque méthode d'API qui accepte les requêtes CORS. En outre, certains navigateurs effectuent d’abord une demande HTTP auprès d’une méthode OPTIONS
dans la même ressource, puis s’attendent à recevoir les mêmes en-têtes.
Exemple de méthode Options
L’exemple suivant crée une méthode OPTIONS
pour une intégration simulée.
/users: options: summary: CORS support description: | Enable CORS by returning correct headers tags: - CORS responses: 200: description: Default response for CORS method headers: Access-Control-Allow-Origin: schema: type: "string" Access-Control-Allow-Methods: schema: type: "string" Access-Control-Allow-Headers: schema: type: "string" content: {} x-amazon-apigateway-integration: type: mock requestTemplates: application/json: "{\"statusCode\": 200}" passthroughBehavior: "never" responses: default: statusCode: "200" responseParameters: method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'" method.response.header.Access-Control-Allow-Methods: "'*'" method.response.header.Access-Control-Allow-Origin: "'*'"
Une fois que vous avez configuré la méthode OPTIONS
pour votre ressource, vous pouvez ajouter les en-têtes requis aux autres méthodes de la même ressource qui doivent accepter des demandes CORS.
-
Déclarez les en-têtes Access-Control-Allow-Origin et Access-Control-Allow-Headers pour les types de réponse.
responses: 200: description: Default response for CORS method headers: Access-Control-Allow-Origin: schema: type: "string" Access-Control-Allow-Methods: schema: type: "string" Access-Control-Allow-Headers: schema: type: "string" content: {}
-
Dans la balise
x-amazon-apigateway-integration
, configurez le mappage de ces en-têtes à vos valeurs statiques :responses: default: statusCode: "200" responseParameters: method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'" method.response.header.Access-Control-Allow-Methods: "'*'" method.response.header.Access-Control-Allow-Origin: "'*'" responseTemplates: application/json: | {}
Exemple d’API
L’exemple suivant crée une API complète avec une méthode OPTIONS
et une méthode GET
avec une intégration HTTP
.
openapi: "3.0.1" info: title: "cors-api" description: "cors-api" version: "2024-01-16T18:36:01Z" servers: - url: "/{basePath}" variables: basePath: default: "/test" paths: /: get: operationId: "GetPet" responses: "200": description: "200 response" headers: Access-Control-Allow-Origin: schema: type: "string" content: {} x-amazon-apigateway-integration: httpMethod: "GET" uri: "http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets" responses: default: statusCode: "200" responseParameters: method.response.header.Access-Control-Allow-Origin: "'*'" passthroughBehavior: "never" type: "http" options: responses: "200": description: "200 response" headers: Access-Control-Allow-Origin: schema: type: "string" Access-Control-Allow-Methods: schema: type: "string" Access-Control-Allow-Headers: schema: type: "string" content: application/json: schema: $ref: "#/components/schemas/Empty" x-amazon-apigateway-integration: responses: default: statusCode: "200" responseParameters: method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'" method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'" method.response.header.Access-Control-Allow-Origin: "'*'" requestTemplates: application/json: "{\"statusCode\": 200}" passthroughBehavior: "never" type: "mock" components: schemas: Empty: type: "object"