web-dev-qa-db-fra.com

La méthode PUT n'est pas autorisée par Access-Control-Allow-Methods dans la réponse de contrôle en amont, à partir d'AWS API Gateway

J'ai une configuration API Gateway pour pointer vers une fonction lambda, configurée comme aws_proxy. Je peux GET, POST, DELETE très bien, mais j'essaie d'ajouter un PUT et j'obtiens Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

XMLHttpRequest ne peut pas se charger https://api.small.pictures/picture/07e78691-20f9-4a20-8be5-458eaeb73a6 . La méthode PUT n'est pas autorisée par Access-Control-Allow-Methods dans la réponse de contrôle en amont.

Je pense que ma configuration CORS est correcte. Voici l'utilisateur swagger pour l'itinéraire.

  '/picture/{picId}':
    options:
      summary: CORS support
      description: |
        Enable CORS by returning correct headers
      consumes:
        - application/json
      produces:
        - application/json
      tags:
        - CORS
      x-Amazon-apigateway-integration:
        type: mock
        requestTemplates:
          application/json: |
            {
              "statusCode" : 200
            }
        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: |
                {}
      parameters:
        - name: picId
          in: path
          required: true
          type: string
      responses:
        200:
          description: Default response for CORS method
          headers:
            Access-Control-Allow-Headers:
              type: "string"
            Access-Control-Allow-Methods:
              type: "string"
            Access-Control-Allow-Origin:
              type: "string"
    x-Amazon-apigateway-any-method:
      produces:
      - "application/json"
      responses:
        200:
          description: "200 response"
          schema:
            $ref: "#/definitions/Empty"
      x-swagger-router-controller: main
      x-lambda-function: ../../swiki/build/picture
      x-Amazon-apigateway-integration:
        type: aws_proxy
        httpMethod: POST
        uri: arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/@@LambdaFunctionPicture/invocations
        credentials: @@APIGatewayExecutionRole

Comme vous pouvez le voir, j'ai Access-Control-Allow-Headers, Access-Control-Allow-Methods et Access-Control-Allow-Origin configuré.

Pourquoi ne puis-je pas faire de demande PUT?

10
Justin808

Actuellement, la définition de '*' sur les méthodes autorisées ne semble pas être prise en charge par la plupart des navigateurs. Vous devez donc définir les méthodes explicitement à la main pour obtenir la prise en charge du navigateur.

Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS

Access-Control-Allow-Methods

Notes de compatibilité

La valeur générique (*) mentionnée dans la dernière spécification n'est pas encore implémentée dans les navigateurs:

Chrome: Numéro 615313

Firefox: bug 1309358

Servo: problème 13283

15
jens walter