¿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 --verbose
indicador 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-Origin
encabezado.
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 -H
banderas envían encabezados de solicitud de verificación previa adicionales al servidor
El -X OPTIONS
indicador 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-Methods
y Access-Control-Allow-Headers
las 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 -H
bandera.
--verbose
opció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
--head
salidas 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
--head
hacer que curl imprima los encabezados, pero también hace que curl haga unaHEAD
solicitud en lugar de aGET
. Dependiendo de lo que esté probando, es posible que desee hacer unaGET
solicitud. 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.com
Busque
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-Origin
respuestaAccess-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.