title: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response, from AWS API Gateway
body: <p>I've got API Gateway setup to point to a lambda function, setup as a <code>aws_proxy</code>. I can GET, POST, DELETE just fine, but I'm trying to add a PUT and I getting <code>Method PUT is not allowed by Access-Control-Allow-Methods in preflight response</code>.</p>
  
  <blockquote>
    <p>XMLHttpRequest cannot load <a href="https://api.small.pictures/picture/07e78691-20f9-4a20-8be5-458eaeb73a63" rel="noreferrer">https://api.small.pictures/picture/07e78691-20f9-4a20-8be5-458eaeb73a63</a>. Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.</p>
  </blockquote>
  
  <p>I think I have my CORS setup properly. Here is the swagger user for the route.</p>
  
  <pre><code>  '/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
  </code></pre>
  
  <p>As you can see I have <code>Access-Control-Allow-Headers</code>, <code>Access-Control-Allow-Methods</code> and <code>Access-Control-Allow-Origin</code> configured.</p>
  
  <p>Why can't I make a PUT request?</p>