Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
Problema de API Gateway CORS, con la carga útil correcta

He estado tratando de arreglar esto todo el día.

Obtuve una función de Lambda que intento ejecutar cuando realizo una solicitud POST al punto final (configurado con AWS API GATEWAY).

Todo funciona bien, mis opciones obtienen un 200 de aprobación, mi publicación obtiene un 200 de aprobación y regresa con los datos que quiero.

Sin embargo, cuando lo recupero, "piensa" que falló. Uso JQuery para este proyecto, y vuelve como el cb "fallido".

Mirando el registro de la consola, el problema es claramente el siguiente error:

XMLHttpRequest no puede cargar https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/prod/createCustomer . No hay ningún encabezado 'Access-Control-Allow-Origin' en el recurso solicitado. Por lo tanto, no se permite el acceso al origen ' http://localhost:3000 '.

un problema estándar de CORS. Pero nada de lo que hago parece funcionar. Habilité CORS en la puerta de enlace API (antes de eso, las OPCIONES fallarían). el 'Access-Control-Allow-Origin': está configurado en: '*' lo que debería permitir el acceso desde cualquier origen. Por supuesto, implementé la nueva API.

También intenté no usar CORS y, en su lugar, habilitar el proxy de AWS y tener mi respuesta como esta { statusCode, headers, body } pero al hacerlo no obtengo respuesta alguna.

No tengo ni idea de por dónde empezar a intentar arreglar esto. Incluso probé un método jsonp sucio. Pero sigue siendo el mismo problema. :(

El único dato que puedo encontrar en mi solicitud que no parece estar bien es este: x-cache:Miss from cloudfront

Aquí están los encabezados de respuesta completos de la solicitud POST:

 content-length:2312 content-type:application/json date:Thu, 23 Mar 2017 22:15:08 GMT status:200 via:1.1 95a477af435073615179b256d8101334.cloudfront.net (CloudFront) x-amz-cf-id:Hc6POYFO0HKB1xriSg2iH7O1po7ah926a4dQkgfSNBUZ460RoHRNuw== x-amzn-requestid:2b5ed745-1016-11e7-b497-cb0a77cd1479 x-amzn-trace-id:Root=1-58d448ea-56717776eaa3f5389083e9ca x-cache:Miss from cloudfront

Lamentablemente, como es bastante obvio, los encabezados de control de acceso no están ahí... Supongo que ese es el problema que estoy tratando de solucionar desesperadamente. Pero no tengo idea de por qué, ya que lo configuré en ' * ' durante el paso Habilitar CORS de este proceso.

Pude estar casi cerca de una solución al crear manualmente un método POST (a diferencia de "CUALQUIERA"), luego habilitar CORS nuevamente, luego activar el PROXY en la respuesta de integración y establecer mi respuesta en: { statusCode, headers, body } Esto volverá como un evento exitoso y ejecutará la función de devolución de llamada correcta en mi llamada ajax. Sin embargo, al usar este método no obtengo datos de Lambda... a pesar de tenerlo en "cuerpo", todo lo que recibo es un objeto vacío.

Realmente no tengo preferencia por usar CORS o agregar encabezados manualmente, está bien, no actualizaré tanto. Realmente necesito que funcione :( Cualquier ayuda sería muy apreciada.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Si obtuvo x-cache:Miss from cloudfront desde su API, está bien porque API Gateway no habilita el caché perimetral en el lado de la nube. Si desea que CORS funcione con la integración de proxy Lambda, puede devolver el código de estado y los encabezados, como,

 { "statusCode": 200, "headers": { "Access-Control-Allow-Origin": "<domains you need>" } }

Entonces, será como una respuesta vacía del lado del cliente.

about 4 years ago · Santiago Trujillo Report

0

Ahora tengo una idea de por qué, pero pude hacerlo funcionar. Usando los siguientes pasos:

  1. Habilitar CORS,
  2. Implementar API, (probablemente se puede omitir...)
  3. Agregar manualmente el método POST,
  4. Activar proxy en la respuesta de integración,
  5. Implementar API de nuevo
  6. cambie la respuesta de devolución de llamada al formato: { statusCode: 200, encabezados: {}, cuerpo: {} }
  7. use JSON.parse() para analizar su carga útil.

Esta definitivamente no es una respuesta perfecta. Por alguna razón, encender el Proxy modificó la forma en que mi función Lambda recibía datos, por lo que tuve que Stringificarlo para no causar un error. No puedo ofrecer una explicación de por qué sucedió esto.

Los encabezados que usé fueron:

 "Access-Control-Allow-Methods": "DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT", "Access-Control-Allow-Origin": "*"

Una mejor solución para esto también sería una forma de hacerlo simplemente usando CORS. Como no tiene que insertar encabezados manualmente en todas sus respuestas. Pero no pude hacer que funcionara. Entonces, por favor, si alguien sabe una mejor solución para esto, ¡publíquela!

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!