Se creó una función AWS Lamba (NodeJS) que devuelve 3 encabezados HTTP: aaa, Access-Control-Allow-Origin y bbb:
exports.handler = async (event) => { const response = { statusCode: 200, headers: { "aaa":"aaa", "Access-Control-Allow-Origin":"*", "bbb":"bbb" }, body: JSON.stringify('Hello from Lambda!'), }; return response; };La función está integrada en una API HTTP (no API REST). En la configuración de puerta de enlace API HTTP, sección "Configurar CORS", el encabezado HTTP "Access-Control-Allow-Origin" se estableció en "*". Por favor, vea la captura de pantalla:
Configuración de puerta de enlace
El comando "curl -i https://xxxxxxxxxx.execute-api.eu-central-1.amazonaws.com " prueba que el encabezado HTTP Access-Control-Allow-Origin se eliminó explícitamente, porque solo los encabezados HTTP aaa y bbb son devuelto:
HTTP/2 200 date: Tue, 14 Apr 2020 11:01:58 GMT content-type: text/plain; charset=utf-8 content-length: 20 aaa: aaa bbb: bbb apigw-requestid: K-S2EjVWliAEJKw=¿Por qué diablos este encabezado aún no está presente, incluso después de que se haya realizado "Configurar CORS"?
(Estoy buscando en Google durante más de dos días para encontrar una solución y me vuelve loco)
Según la configuración de CORS para una API HTTP :
Si configura CORS para una API, API Gateway ignora los encabezados de CORS devueltos por su integración de back-end.
Es por eso que se ignoran los encabezados CORS de su Lambda (integración). Esta es una de las diferencias entre las nuevas API HTTP y las API REST originales. En el caso de estas API,
Para una solicitud de CORS, API Gateway agrega los encabezados de CORS configurados a la respuesta de una integración.
Cuando haces un rizo simple, eso no es realmente hacer una solicitud de origen cruzado. Por lo tanto, no ve los encabezados CORS que establecería la API HTTP. Para verificar si una solicitud de CORS funciona, pasé un encabezado de origen en la siguiente solicitud y puedo ver los encabezados de CORS junto con mis encabezados personalizados de Lambda:
$ curl -v -X GET https://$API_ID.execute-api.$AWS_REGION.amazonaws.com -H "Origin: https://www.example.com" < HTTP/2 200 < date: Tue, 14 Apr 2020 18:02:26 GMT < content-type: text/plain; charset=utf-8 < content-length: 18 < aaa: aaa < bbb: bbb < access-control-allow-origin: https://www.example.com < access-control-expose-headers: date, x-api-idA continuación se muestra un fragmento de mi configuración de CORS en la API. Agregué el valor Access-Control-Allow-Origin como https://www.example.com y pasé esto como parte del encabezado Origin en mi solicitud curl. Tal solicitud calificaría como CORS.
Para las solicitudes POST/PUT, deberá incluir en la lista blanca el encabezado content-type . Poner el comodín no funciona por alguna razón, debe incluirlo explícitamente en la lista blanca.
Para Googlers:
Si las comprobaciones previas de OPTIONS tienen éxito pero no hay encabezados de control Access-Control- presentes, y si está probando usando CURL, preste especial atención para deletrear los encabezados requeridos para una verificación previa:
Si se escribe incorrectamente, OPTIONS tiene éxito con 204 No Content , pero sin encabezados Access-Control- lo que el resultado de la verificación previa no es válido.
También verifique que tenga suficiente alcance para los parámetros, siempre que el método solicitado y los encabezados sean un subconjunto del parámetro, obtendrá encabezados Access-Control- . Si no, obtendrá 204 No Content en su lugar, ¡lo cual diría que no es muy informativo!