Aunque CORS se ha configurado a través de API Gateway y el Access-Control-Allow-Origin
encabezado 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?
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);
};
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 0
o 1
de 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!
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.
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.
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(); }
});
Para los empleados de Google:
He aquí por qué:
GET
/ POST
sin cookies no activa la verificación previaOPTIONS
método para esa ruta, luego enviará Allow-Origin
encabezados usando respuestas simuladas cuando el usuario llame OPTIONS
, pero GET
/ POST
no obtendrá Allow-Origin
automáticamenteAllow-Origin
encabezadoOPTIONS
Para resumirlo:
OPTIONS
API Gateway solo generará inofensivoOPTIONS
solo son utilizados por el navegador como medida de precaución para verificar la posibilidad de CORS en una rutaGET
. Ej .POST
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;
};
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ó !
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.
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.
Después de cambiar su función o código, siga estos dos pasos.
Primero habilite CORS y luego implemente API cada vez.
Implementar el código después de habilitar CORS para ambos POST
y OPTIONS
funcionó para mí.
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'"
#...
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.
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-Origin
cabecera faltaba veces .
Contexto: teníamos una Lambda en su lugar, dedicada a manejar OPTIONS
solicitudes y responder con los encabezados CORS correspondientes, como hacer Access-Control-Allow-Origin
coincidir 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.origin
que 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 Origin
encabezado en minúsculas ):
curl -v -X OPTIONS --http1.1 -H 'Origin: https://www.example.com' https://api.example.com
Si Access-Control-Allow-Origin
falta el encabezado, es posible que desee verificar la distinción entre mayúsculas y minúsculas al leer el Origin
encabezado.
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.
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
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.
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.
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 inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
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?
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!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
¿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.
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.
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á enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.
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.
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
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
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".
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.
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.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.