origin headers falta enable control chrome cabecera allow ajax amazon-web-services cors aws-api-gateway

ajax - headers - API Gateway CORS: sin encabezado ''Access-Control-Allow-Origin''



enable cors (12)

Aunque CORS se ha configurado a través de API Gateway y el encabezado Access-Control-Allow-Origin está configurado, sigo recibiendo el siguiente error cuando intento llamar a la API desde AJAX dentro de Chrome:

XMLHttpRequest no puede cargar http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY . No hay encabezado ''Access-Control-Allow-Origin'' presente en el recurso solicitado. Por lo tanto, el origen ''nulo'' no tiene acceso permitido. La respuesta tenía el código de estado HTTP 403.

Intenté OBTENER la URL a través de Postman y muestra que el encabezado anterior se pasó con éxito:

Y de la respuesta de OPCIONES:

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


En Python puedes hacerlo como en el siguiente código:

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


En mi caso, dado que estaba usando AWS_IAM como método de autorización, necesitaba otorgar mis permisos de rol de IAM para llegar al punto final.


En mi caso, simplemente estaba escribiendo mal la URL de solicitud de recuperación. En serverless.yml , establece cors en 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 luego en el controlador lambda envía los encabezados, pero si hace que la solicitud de recuperación sea incorrecta en la interfaz, no obtendrá ese encabezado en la respuesta y obtendrá este error. Por lo tanto, verifique su URL de solicitud en el frente.


Encontré una solución simple dentro

API Gateway> Seleccione su punto final de API> Seleccione el método (en mi caso, fue la POST)

Ahora hay un menú desplegable ACCIONES> Habilitar CORS ... selecciónelo.

Ahora seleccione nuevamente las ACCIONES desplegables> Implementar API (vuelva a implementarlo)

Funcionó !


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

Antes de que CORS se configurara en https://example.com , simplemente npm run setup el nombre de mi sitio y lo npm run setup a npm run setup través de npm run setup , y actualizó mi lambda / stack existente.

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


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

Síntoma: Algunos usuarios, no todos, informaron que obtuvieron un error CORS al usar nuestro Software.

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

Contexto: teníamos un Lambda en su lugar, dedicado a manejar la solicitud de OPTIONS y responder con los encabezados CORS correspondientes, como Access-Control-Allow-Origin coincide con un Origin lista blanca.

Solución: API Gateway parece transformar todos los encabezados a minúsculas para las llamadas HTTP / 2, pero mantiene las mayúsculas para HTTP / 1.1. Esto hizo que el acceso a event.headers.origin fallara.

Comprueba si también tienes este problema:

Suponiendo que su API se encuentra en https://api.example.com , y su front-end está en https://www.example.com . Usando CURL, haga una solicitud usando HTTP / 2:

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

La salida de respuesta debe incluir el encabezado:

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

Repita el mismo paso con HTTP / 1.1 (o con un encabezado de Origin minúsculas):

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

Si falta el encabezado Access-Control-Allow-Origin , es posible que desee comprobar la distinción entre mayúsculas y minúsculas al leer el encabezado Origin .


Puse el mío en funcionamiento después de darme cuenta de que el autorizador lambda estaba fallando y por alguna razón desconocida que se estaba traduciendo en un error CORS. Una solución simple para mi autorizador (y algunas pruebas de autorizador que debería haber agregado en primer lugar) y funcionó. Para mí, se requería la acción API Gateway ''Habilitar CORS''. Esto agregó todos los encabezados y otras configuraciones que necesitaba en mi API.


Si alguien más se encuentra con esto todavía, pude rastrear la causa raíz en mi aplicación.

Si está ejecutando API-Gateway con Autorizadores personalizados, API-Gateway enviará un 401 o 403 antes de que llegue a su servidor. De manera predeterminada, API-Gateway NO está configurado para CORS cuando devuelve 4xx desde un autorizador personalizado.

Además, si obtiene un código de estado de 0 o 1 de una solicitud que se ejecuta a través de API Gateway, este es probablemente su problema.

Para corregir, en la configuración de API Gateway, vaya a "Respuestas de Gateway", expanda "Predeterminado 4XX" y agregue un encabezado de configuración CORS allí. es decir

Access-Control-Allow-Origin: ''*''

Asegúrese de volver a implementar su puerta de enlace , ¡y listo!


Si ha intentado todo lo relacionado con este problema en vano, terminará donde lo hice. Resulta que las instrucciones de configuración CORS existentes de Amazon funcionan bien ... ¡solo asegúrese de recordar volver a implementar ! El asistente de edición CORS, incluso con todas sus pequeñas marcas de verificación verdes, no realiza actualizaciones en vivo en su API. Quizás obvio, pero me dejó perplejo durante medio día.


Tengo el mismo problema. He usado 10 horas para averiguarlo.

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); };


Tengo mi muestra funcionando: acabo de insertar ''Access-Control-Allow-Origin'': ''*'', dentro de los encabezados: {} en la función Lambda generada por nodejs. No hice cambios en la capa API generada por Lambda.

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(); } });


1) Tenía que hacer lo mismo que @riseres y algunos otros cambios. Estos 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 con esta documentación:

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

Cuando utiliza proxy para funciones lambda en la configuración de API Gateway, los métodos de publicación u obtención no tienen encabezados agregados, solo las opciones. Debe hacerlo manualmente en la respuesta (servidor o respuesta lambda).

3) y

Además de eso, necesitaba deshabilitar la opción ''API clave requerida'' en mi método de publicación de puerta de enlace API.