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

103
Tyler 2016-02-04 14:51.

Aunque CORS se ha configurado a través de API Gateway y el Access-Control-Allow-Originencabezado 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 un encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, no se permite el acceso al origen 'nulo'. 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ó correctamente:

Y de la respuesta de OPCIONES:

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

16 answers

121
riseres 2017-03-27 02:56.

Tengo el mismo problema. He utilizado 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);
};
105
Gabriel Doty 2018-02-19 20:46.

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 forma predeterminada, API-Gateway NO está configurado para CORS cuando se devuelve 4xx desde un autorizador personalizado.

También - si quieres pasar a estar recibiendo un código de estado 0o 1de una petición que corre a través de la API de puerta de enlace, esto es probablemente su problema.

Para solucionarlo, en la configuración de API Gateway, vaya a "Respuestas de puerta de enlace", expanda "4XX predeterminado" 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!

19
Carlos Alberto Schneider 2017-04-07 10:12.

1) Necesitaba 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

Según esta documentación:

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

Cuando usa proxy para funciones lambda en la configuración de API Gateway, los métodos post u get 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 'Se requiere clave API' en mi método de publicación de puerta de enlace API.

16
lase 2018-12-04 08:22.

Si ha intentado todo lo relacionado con este tema sin éxito, terminará donde lo hice. Resulta que las instrucciones de configuración de 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 y agradables marcas de verificación verdes, no realiza actualizaciones en vivo de su API. Quizás obvio, pero me dejó perplejo durante medio día.

12
MannyC 2017-04-18 00:24.

Hice funcionar mi muestra: acabo de insertar 'Access-Control-Allow-Origin': '*', dentro de los encabezados: {} en la función Lambda de nodejs generada. Hice no hay cambios en la capa API generada-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(); }
});
8
theaws.blog 2019-11-28 18:27.

Para los empleados de Google:

He aquí por qué:

  • Solicitud simple, o GET/ POSTsin cookies no activa la verificación previa
  • Cuando configura CORS para una ruta, API Gateway solo creará un OPTIONSmétodo para esa ruta, luego enviará Allow-Originencabezados usando respuestas simuladas cuando el usuario llame OPTIONS, pero GET/ POSTno obtendrá Allow-Originautomáticamente
  • Si intenta enviar solicitudes simples con el modo CORS activado, obtendrá un error porque esa respuesta no tiene Allow-Originencabezado
  • Puede adherirse a las mejores prácticas, las solicitudes simples no están destinadas a enviar una respuesta al usuario, enviar autenticación / cookie junto con sus solicitudes para que sea "no simple" y se activará la verificación previa.
  • Aún así, tendrá que enviar los encabezados CORS usted mismo para la siguiente solicitud OPTIONS

Para resumirlo:

  • OPTIONSAPI Gateway solo generará inofensivo
  • OPTIONSsolo son utilizados por el navegador como medida de precaución para verificar la posibilidad de CORS en una ruta
  • La aceptación de CORS dependerá del método real, p GET. Ej .POST
  • Tienes que enviar manualmente los encabezados apropiados en tu respuesta
6
Vishal Shetty 2020-04-26 23:23.

Acabo de agregar encabezados a la respuesta de mi función lambda y funcionó como un encanto

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hey it works'),
        headers:{ 'Access-Control-Allow-Origin' : '*' }
    };
    return response;
};
4
Ravi Ram 2019-06-08 08:53.

Encontré una solución simple dentro

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

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

Ahora seleccione el menú desplegable ACCIONES nuevamente> Implementar API (volver a implementarlo)

Funcionó !

3
RodP 2018-07-16 05:46.

Hice que el mío funcionara después de darme cuenta de que el autorizador lambda estaba fallando y, por alguna razón desconocida, 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 de API Gateway 'Habilitar CORS'. Esto agregó todos los encabezados y otras configuraciones que necesitaba en mi API.

3
Jason 2020-07-14 15:34.

Para mí, la respuesta que FINALMENTE FUNCIONÓ, fue el comentario de James Shapiro de la respuesta de Alex R (la segunda más votada). En primer lugar, me metí en este problema de API Gateway, al intentar obtener una página web estática alojada en S3 para usar lambda para procesar la página de contacto y enviar un correo electrónico. Simplemente marcando [] Default 4XX solucionó el mensaje de error.

2
Ankit Kumar Rajpoot 2020-01-03 23:13.

Después de cambiar su función o código, siga estos dos pasos.

Primero habilite CORS y luego implemente API cada vez.

2
Ziaur Rahman 2020-01-14 02:19.

Implementar el código después de habilitar CORS para ambos POSTy OPTIONSfuncionó para mí.

1
James L. 2018-12-07 14:34.

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

Antes de que se configurara CORS https://example.com, simplemente cambié el nombre de mi sitio y lo volví a implementar a través de npm run setup, y actualicé mi lambda / pila existente.

#...
/:
#...
method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
#...
/{proxy+}:
method.response.header.Access-Control-Allow-Origin: "'https://example.com'"
#...
1
CamHart 2019-04-21 23:31.

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

0
Michael Seibt 2019-05-17 23:59.

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 obtenían un error CORS al usar nuestro software.

Problema: La Access-Control-Allow-Origincabecera faltaba veces .

Contexto: teníamos una Lambda en su lugar, dedicada a manejar OPTIONSsolicitudes y responder con los encabezados CORS correspondientes, como hacer Access-Control-Allow-Origincoincidir una lista blanca Origin.

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 provocó event.headers.originque fallara el acceso a .

Compruebe si también tiene este problema:

Suponiendo que su API está ubicada en https://api.example.com, y su interfaz 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 usando HTTP / 1.1 (o con un Originencabezado en minúsculas ):

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

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

0
Nigel Atkinson 2019-10-30 16:25.

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

Hacer lo 'Habilitar CORS' solo configura el estado 200. Si tiene otros en el punto final, por ejemplo, 4xx y 5xx, debe agregar el encabezado usted mismo.

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Actualice a un Sonicare por tan solo $ 30

Actualice a un Sonicare por tan solo $ 30

¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language