Puerta de enlace API de CORS: no ‘Access-Control-Allow-Origin’ encabezado

Aunque CORS se ha establecido a través de la Puerta de enlace API y el Access-Control-Allow-Origin encabezado set, me sigue apareciendo el error siguiente al intentar llamar a la API de AJAX dentro de Chrome:

XMLHttpRequest no se puede cargar http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY. No ‘Access-Control-Allow-Origin’ encabezado presente en el recurso solicitado. Origen es ‘null’, por tanto, no se permite el acceso. La respuesta ha de código de estado HTTP 403.

He intentado OBTENER la URL a través de Cartero y se muestra por encima de la cabecera es superado con éxito:

Puerta de enlace API de CORS: no 'Access-Control-Allow-Origin' encabezado

Y una de las OPCIONES de respuesta:

Puerta de enlace API de CORS: no 'Access-Control-Allow-Origin' encabezado

¿Cómo puedo llamar a mi API desde el navegador sin volver a JSON-P?

  • ¿Se han fijado en el S3? Si es así, podrías poner el Bucket Policy? Asegúrese de que usted tiene el método en su política de
  • No @iSkore se configura en otro servidor para la prueba. Yo también lo han probado, mientras que para acceder localmente el archivo de mi PC y a través de otros servidores. Hay algo que tengo que configurar en la página de alojamiento de servidor para permitir el uso de CORS? Mi entendimiento es que sólo el servidor de la API de las necesidades de configuración de la alteración de CORS.
  • Así ha agregado un CORS de la política a su API, aunque? Y qué quieres decir con ‘la página del servidor de hosting’? Tan sólo un servidor o un servidor estático
  • Sí, a través de la opción «Habilitar CORS» en las opciones de la Puerta de enlace API de AWS
  • Gotcha, y le hizo incluir una política con que?
  • Esto puede o no puede ayudar pero se encontró en este enlace: stackoverflow.com/questions/10636611/…
  • ¿La llamada de OPCIONES de tener éxito? Puedes publicar los resultados de las OPCIONES de llamada? Este es el resultado que iba a ver si las OPCIONES de llamada falla debido a auth o de otros errores
  • He añadido las OPCIONES de resultado a la pregunta
  • Entonces, ¿qué estás tratando de hacer? OBTENER datos o averiguar qué OPCIONES de conexión están disponibles. También si usted está utilizando CloudFront, a veces se tarda un tiempo para que puedan enviar sus archivos a la CDN. Esto sólo se aplica si se configura la CloudFront en la última hora o dos.
  • Hey comprobar esto hacia fuera también. Este tipo es el uso de AJAX demasiado. stackoverflow.com/questions/20035101/…
  • La Puerta de enlace API equipo de aquí… Si se utiliza la opción ‘Habilitar CORS’ función en la consola, la configuración debe ser la correcta. Mi mejor conjetura sería que no invocar la correcta ruta de acceso a recursos en su API en JavaScript y que el navegador se está ejecutando. Si intentas hacer una llamada a la API a un inexistente método/de recursos/de la etapa recibirá un genérico 403 con ninguno de los CORS encabezados. No veo cómo el navegador podría perderse el Access-Control-Allow-Origin de cabecera si usted está llamando a la derecha de recursos desde las OPCIONES de llamada en Cartero claramente contenga todos los CORS encabezados.
  • He verificado que el recurso de ruta de acceso es correcta y fue capaz de acceder con éxito el método directamente a través de la dirección URL en Chrome. También, el error menciona explícitamente a la falta de la ‘Access-Control-Allow-Origin’ encabezado.
  • La mayoría de las veces este mensaje de error engañoso es debido al OBTENER su defecto con un 404 o un error 403. En esos casos, el CORS cabeceras no son devueltos por el servicio. Es el cliente que firma la solicitud con credenciales y la política de IAM para esas credenciales autorizadas para llamar a esa API/método? Puede usted confirmar que la dirección URL utilizada por el cliente es correcta?
  • el cliente no firma la solicitud debido a que el API es autenticado por el recurso de llamadas utilizando un usuario específico de token, por lo que las credenciales no son un factor. Yo puedo llamar a la API visitando la URL directamente en el navegador y me da la respuesta adecuada.
  • Encontraste una solución para esto? Estoy pasando por el mismo problema aquí.
  • Creo que he quitado la API y re-agregó, habilitar CORS y trabajó para mí. Todavía no estoy seguro exactamente lo que ha cambiado provocando el trabajo.
  • Ah, me acabo probado, y funciona por alguna razón extraña. Tengo cientos de recursos y métodos y va a ser un infierno de una tarea de recrear a todos ellos. Esto también puede lograrse por especificar manualmente el encabezado en la Integración de la Respuesta. De cualquier manera, es un montón de trabajo. Gracias por la ayuda.
  • Mis métodos, y la etapa se genera automáticamente Lambda. Yo habilitado CORS después del hecho. Mismos errores OP. Me dejó el auto genera cosas, creó una nueva API y métodos, se implementa en una nueva etapa, y funcionó bien.
  • sólo traté de esto, no hubo suerte 🙁
  • Véase mi respuesta a esta pregunta podría estar relacionado con una clave de API problema, stackoverflow.com/questions/34325009/…
  • Necesitamos ver las cabeceras de la respuesta de la real de la petición ajax que está tirando de dicho error. Cartero resultados no son realmente del todo útil. El error indica que dicha cabecera no existe, me siento más inclinado a creer que no existe que un error es introducida indicando que algo que no existe, cuando en realidad tiene.
  • The response had HTTP status code 403 específicamente consejos que vas a recibir una respuesta de error, y el error de la respuesta probable es que no han dicho encabezado cors.
  • Mi solución fue eliminar la Puerta de enlace API y Crear uno nuevo, enble cors. Gracias!!!

InformationsquelleAutor Tyler | 2016-02-04

13 Kommentare

  1. 81

    Me sale el mismo problema. He utilizado 10hrs a findout.

    https://serverless.com/framework/docs/providers/aws/events/apigateway/

    //handler.js
    
    'use strict';
    
    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);
    };
    • La adición de los encabezados de resolver el mismo problema en el caso 🙂
    • Solucionado el problema que tenía así. Gracias por tu respuesta!
    • Yo no uso serverless, pero esta solucionado mi problema. Supongo que se necesita para pasar los encabezados de la fuente real.
    • Para su INFORMACIÓN, hay un problema con el ejemplo que aquí se presenta. Si usted tiene «Access-Control-Allow-Credenciales»: true, usted no puede tener el carácter comodín * para Access-Control-Allow-Origin. Esta regla se aplica por el navegador. Consulte here y aquí
    • Esto no es trabajar, nos muestra de Nuevo el mismo error de Solicitud de campo de cabecera access-control-allow-credenciales no es permitido por Access-Control-Allow-Encabezados en comprobaciones de respuesta.
    • ¿cómo se puede hacer esto con java RequestHandler<RequestClass, ResponseClass> clase?
    • Para los curiosos, aquí está el oficial docs mencionar esto: docs.aws.amazon.com/apigateway/latest/developerguide/… > Para Lambda o proxy HTTP integraciones, usted todavía puede establecer la necesaria > OPCIONES de encabezados de respuesta en la Puerta de enlace API. Sin embargo, usted debe confiar en el > back-end para devolver el Access-Control-Allow-Origin encabezados porque el > la integración de la respuesta está deshabilitado para el proxy de la integración.
    • únicamente la configuración de «Access-Control-Allow-Origin» : «*» de lambda resuelto el problema

  2. 70

    Si alguien más se está ejecutando en este todavía era capaz de localizar la causa raíz en mi aplicación.

    Si está ejecutando API-Puerta de enlace con la costumbre de quienes autorizan – API-Puerta de enlace enviará un 401 o 403 de vuelta antes de que realmente llegue a tu servidor. Por defecto – API-Puerta de enlace NO está configurado para el CORS al regresar 4xx de una costumbre poderdante.

    También – si le sucede a conseguir un código de estado de 0 o 1 de una solicitud de ejecución a través de la Puerta de enlace API, esta es probablemente su problema.

    A fijar en la Puerta de enlace API de configuración – ir a «Puerta de enlace de Respuestas», expanda «Default 4XX» y agregar un CORS de configuración encabezado de allí. es decir,

    Access-Control-Allow-Origin: '*'

    Asegúrese de volver a implementar la puerta de enlace – y voila!

    • te amo. en serio estado trabajando en esto durante dos días.
    • me alegro de que ayudaste a alguien!
    • Para aquellos que quieran hacer esto con la CLI de AWS, uso: aws apigateway update-gateway-response --rest-api-id "XXXXXXXXX" --response-type "DEFAULT_4XX" --patch-operations op="add",path="/responseParameters/gatewayresponse.header.Access-Control-Allow-Origin",value='"'"'*'"'"'
    • Yo no estoy usando personalizado quienes autorizan y todavía necesita esto como mi petición tenido malas JSON en ella – ¡gracias!
    • nota para mí mismo – no te olvides de implementar la API después 🙂
    • Extraño, esto funcionó para mí, pero yo no tenga que volver a implementar. Me hizo probar la recolocación de los anteriores. No sé por qué a mí me funcionó.
    • Agregar el encabezado CORS a 4XX le permite ver el mensaje de error real en lugar de la CORS de error.
    • Dado en el clavo – ¡gracias!

  3. 14

    1) que necesitaba para hacer lo mismo que @riseres y algunos otros cambios.Esta son mis encabezados de respuesta:

    headers: {
                'Access-Control-Allow-Origin' : '*',
                'Access-Control-Allow-Headers':'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
                'Access-Control-Allow-Credentials' : true,
                'Content-Type': 'application/json'
            }

    2) Y

    De acuerdo a esta documentación:

    http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

    Al usar proxy para las funciones lambda en la Puerta de enlace API de configuración, los métodos post o get no tienen agrega encabezados, sólo las opciones que tiene. Debes hacerlo manualmente en la respuesta(servidor o lambda de respuesta).

    3) Y

    Además de que, yo necesitaba para desactivar el «API Key Necesaria’ en mi puerta de enlace API método post.

    • Sí, creo que la cosa sutil que muchos de nosotros se pierda inicialmente es que una vez que configurar la Puerta de enlace API de integración de la función Lambda con «Uso Lambda Proxy de la Integración», entonces usted debe hacer, como usted y otros están diciendo, y asegurar que los encabezados se agregan mediante programación en el lambda de la respuesta. La auto-generación de la materia que es creado por «Habilitar CORS» en una Puerta de enlace API y la creación de una de las OPCIONES de respuesta genial, pero no te todo el camino hasta allí si establece «el Uso de Lambda Proxy de la integración» en la Solicitud de Integración dentro de la Puerta de enlace API.
  4. 10

    Tengo mi ejemplo de trabajo: I sólo inserta ‘Access-Control-Allow-Origin’: ‘*’, dentro de encabezados:{} generado en la nodejs función Lambda. Hice no cambios en el Lambda-API generada capa.

    Aquí está mi NodeJS:

    'use strict';
    const doc = require('dynamodb-doc');
    const dynamo = new doc.DynamoDB();
    exports.handler = ( event, context, callback ) => {
        const done = ( err, res ) => callback( null, {
            statusCode: err ? '400' : '200',
            body: err ? err.message : JSON.stringify(res),
            headers:{ 'Access-Control-Allow-Origin' : '*' },
        });
        switch( event.httpMethod ) {
            ...
        }
    };

    Aquí está mi llamada AJAX

    $.ajax({
        url: 'https://x.execute-api.x-x-x.amazonaws.com/prod/fnXx?TableName=x',
        type: 'GET',
        beforeSend: function(){ $( '#loader' ).show();},
        success: function( res ) { alert( JSON.stringify(res) ); },
        error:function(e){ alert('Lambda returned error\n\n' + e.responseText); },
        complete:function(){ $('#loader').hide(); }
    });
    • He encontrado un montón de Amazon, la documentación a ser fuera de fecha, incluso con el «../última/..» ruta de acceso de fragmento. Después de que el desguace de todo lo que hace una semana, el CORS botón de repente declaró funcionando correctamente. La API se creó el «CUALQUIER» método automáticamente y el CORS botón creado las «OPCIONES» método automáticamente – he añadido nada a la API. El «GET» por encima de las obras y desde entonces he añadido un ajax «POST», que también funciona sin mí tocar la API.
    • Lo único que trabajó para mí!
    • Me pasé casi dos horas tratando de averiguar cómo obtener Access-Control-Allow-Origin añadido a la respuesta del método utilizando la consola de AWS, pero esta fue también la única cosa que trabajó para mí.
  5. 3

    Yo tengo la mía de trabajo después me di cuenta de que la lambda authoriser estaba fallando y por algún motivo desconocido, que se está traduciendo en un CORS de error. Una solución sencilla para mi authoriser (y algunos authoriser pruebas de que yo debería haber añadido en el primer lugar) y funcionó. Para mí, la Puerta de enlace API de acción «Habilitar CORS» fue necesario. Este agregado de todos los títulos y otros valores de configuración que yo necesitaba en mi API.

    • y volver a implementar! 🙂
  6. 3

    Si usted ha intentado todo con respecto a este tema fue en vano, terminarás donde hice. Resulta que Amazon existente CORS instrucciones de instalación de funcionar bien… sólo asegúrese de que usted recordar para volver a implementar! El CORS asistente de edición, incluso con toda su poco agradable marcas verdes, no hacer actualizaciones en vivo de su API. Quizás obvio, pero es sacado de mí por la mitad de un día.

    Puerta de enlace API de CORS: no 'Access-Control-Allow-Origin' encabezado

    • Esto era él. Literalmente trabajando en esto durante dos días. No asegurarse de que la lógica no al menos muestre un mensaje para volver a implementar después de editar la puerta de enlace.
    • me alegro de que te saliera descubrió, siempre hay algo para aliviar a la vez increíblemente derrotar a problemas como este
  7. 1

    En mi caso, ya que yo estaba usando AWS_IAM como el método de Autorización, necesitaba a conceder a mi función de IAM permisos para golpear el extremo.

  8. 0

    Estoy corriendo aws-serverless-express, y en mi caso necesitaba editar simple-proxy-api.yaml.

    Antes de CORS fue configurado para https://example.com, yo sólo cambió en mi nombre del sitio y se despliegan a través de npm run setup, y es actualizado mi existentes lambda/pila.

    #...
    /:
    #...
    method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
    #...
    /{proxy+}:
    method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
    #...
  9. 0

    Otra causa raíz de este problema podría ser la diferencia entre HTTP/1.1 y HTTP/2.

    Síntoma: Algunos usuarios, no todos de ellos, informó a obtener un CORS de error al utilizar nuestro Software.

    Problema: La Access-Control-Allow-Origin encabezado faltaba a veces.

    Contexto: tuvimos una Lambda en el lugar, dedicada a la manipulación OPTIONS solicitud y la contestación con la correspondiente CORS encabezados, tales como Access-Control-Allow-Origin que coincidan con una lista blanca Origin.

    Solución: La Puerta de enlace API parece a transformar todos los encabezados minúsculas para HTTP/2 llamadas, pero mantiene la capitalización para HTTP/1.1. Esto provocó que el acceso a event.headers.origin a fallar.

    Comprobar si usted está teniendo este problema:

    Asumiendo que la API se encuentra en https://api.example.com, y su front-end es en https://www.example.com. El uso de CURL, hacer una solicitud de HTTP/2:

    curl -v -X OPTIONS -H 'Origin: https://www.example.com' https://api.example.com

    La respuesta de salida debe incluir el encabezado:

    < Access-Control-Allow-Origin: https://www.example.com

    Repetir el mismo paso con HTTP/1.1 (o con minúscula Origin encabezado):

    curl -v -X OPTIONS --http1.1 -H 'Origin: https://www.example.com' https://api.example.com

    Si el Access-Control-Allow-Origin encabezado falta, es posible que desee comprobar caso de sensibilidad a la hora de la lectura de la Origin encabezado.

  10. 0

    Además de otros comentarios, algo a tener en cuenta es el estado regresó de su subyacente de integración y si el Access-Control-Allow-Origin encabezado se devuelve para que el estado.

    Haciendo el «Habilitar CORS’ cosa sólo de los conjuntos de hasta 200 estado. Si usted tiene otros en el extremo, e.g 4xx y 5xx, usted necesita agregar el encabezado de sí mismo.

  11. -1

    En mi caso, yo era simplemente escribir la recuperación solicitud de dirección URL incorrecta. En serverless.yml, se establece cors a true:

    register-downloadable-client:
        handler: fetch-downloadable-client-data/register.register
        events:
          - http:
              path: register-downloadable-client
              method: post
              integration: lambda
              cors: true
              stage: ${self:custom.stage}

    y, a continuación, en el lambda controlador de enviar las cabeceras, pero si se hace la recuperación solicitud de malo en el frontend, no vas a conseguir que el encabezado en la respuesta y vas a salir este error. Así, verifique la dirección URL de la solicitud en la parte delantera.

  12. -2

    En Python se puede hacer como en el siguiente código:

    { "statusCode" : 200,
    'headers': 
        {'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': "*"
         },
    "body": json.dumps(
        {
        "temperature" : tempArray,
        "time": timeArray
        })
     }
  13. -3

    He encontrado una solución simple dentro de

    Puerta de enlace API > Seleccione su extremo de API > Seleccione el método (en mi caso fue el POST)

    Ahora hay un desplegable ACCIONES > Habilitar CORS .. seleccionarlo.

    Ahora seleccione el menú desplegable ACCIONES de nuevo > Implementar la API (volver a implementarlo)

    Puerta de enlace API de CORS: no 'Access-Control-Allow-Origin' encabezado

    Funcionó !

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea