¿Cómo puede depurar solicitudes CORS usando cURL? Hasta ahora no pude encontrar ninguna manera de "simular" la solicitud de verificación previa.
A continuación, le mostramos cómo puede depurar las solicitudes CORS con curl.
Envío de una solicitud CORS regular utilizando cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
La -H "Origin: http://example.com"bandera es el dominio de terceros que realiza la solicitud. Sustituir en cualquiera que sea su dominio.
El --verboseindicador imprime la respuesta completa para que pueda ver los encabezados de solicitud y respuesta.
La url que estoy usando anteriormente es una solicitud de muestra a una API de Google que admite CORS, pero puede sustituirla por la url que esté probando.
La respuesta debe incluir el Access-Control-Allow-Originencabezado.
Enviar una solicitud de verificación previa utilizando cUrl:
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Esto se parece a la solicitud CORS normal con algunas adiciones:
Las -Hbanderas envían encabezados de solicitud de verificación previa adicionales al servidor
El -X OPTIONSindicador indica que se trata de una solicitud de OPCIONES HTTP.
Si la solicitud de verificación previa se realiza correctamente, la respuesta debe incluir las Access-Control-Allow-Origin, Access-Control-Allow-Methodsy Access-Control-Allow-Headerslas cabeceras de respuesta. Si la solicitud de verificación previa no tuvo éxito, estos encabezados no deberían aparecer o la respuesta HTTP no será 200.
También puede especificar encabezados adicionales, como User-Agent, mediante el uso de la -Hbandera.
--verboseopción, como se mencionó anteriormente.--head:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file.Respuesta actualizada que cubre la mayoría de los casos
Access-Control-Allow-*entonces su recurso es compatible con CORS.Justificación de una respuesta alternativa
Busco en Google esta pregunta de vez en cuando y la respuesta aceptada nunca es lo que necesito. Primero imprime el cuerpo de respuesta, que es mucho texto. Agregar
--headsalidas solo encabezados. En segundo lugar, al probar las URL de S3, debemos proporcionar un encabezado adicional-H "Access-Control-Request-Method: GET".Espero que esto ahorre tiempo.
fuente
--headhacer que curl imprima los encabezados, pero también hace que curl haga unaHEADsolicitud en lugar de aGET. Dependiendo de lo que esté probando, es posible que desee hacer unaGETsolicitud. Puedes hacer esto agregando--IXGET.El script bash "corstest" a continuación me funciona. Se basa en el comentario anterior de Jun .
uso
url de corstest [-v]
ejemplos
el resultado positivo se muestra en verde
el resultado negativo se muestra en rojo y azul
la opción -v mostrará los encabezados de rizo completo
corstest
fuente
Parece que esto funciona:
curl -I http://example.comBusque
Access-Control-Allow-Origin: *en los encabezados devueltosfuente
*no funciona si las credenciales, como una cookie, deben presentarse con la solicitud de API. En ese caso, también se requiere el FQDN en laAccess-Control-Allow-OriginrespuestaAccess-Control-Allow-Credentials: true. Las solicitudes con credenciales, aunque no fueron especificadas como un requisito por parte de OP, por lo que*funcionan para cualquier solicitud no autenticada.