¿Cómo se puede depurar una solicitud CORS con cURL?

¿Cómo se pueden depurar las solicitudes CORS utilizando cURL? Hasta el momento no he podido encontrar ninguna forma de “simular” la solicitud de verificación previa.

A continuación, le indicamos cómo puede depurar las solicitudes CORS utilizando curl.

Enviar una solicitud CORS regular usando cUrl:

curl -H "Origin: http://example.com" --verbose \ https://www.googleapis.com/discovery/v1/apis?fields= 

El indicador -H "Origin: http://example.com" es el dominio de terceros que realiza la solicitud. Sustituir en cualquier dominio que sea.

El indicador --verbose imprime toda la respuesta 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 en cualquier url que esté probando.

La respuesta debe incluir el encabezado Access-Control-Allow-Origin .

Enviar una solicitud de verificación previa usando 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 regular de CORS con algunas adiciones:

Los indicadores -H envían encabezados adicionales de solicitud de verificación previa al servidor

La -X OPTIONS indica que se trata de una solicitud HTTP OPTIONS.

Si la solicitud de verificación previa es exitosa, la respuesta debe incluir los Access-Control-Allow-Headers respuesta Access-Control-Allow-Origin , Access-Control-Allow-Methods y Access-Control-Allow-Headers encabezados. Si la solicitud de verificación previa no fue exitosa, estos encabezados no deberían aparecer, o la respuesta HTTP no será 200.

También puede especificar encabezados adicionales, como User-Agent , utilizando el indicador -H .

Respuesta actualizada que cubre la mayoría de los casos

 curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/ 
  1. Reemplace http: // localhost con la URL que desea probar.
  2. Si la respuesta incluye Access-Control-Allow-* entonces su recurso es compatible con CORS.

Justificación de una respuesta alternativa

Busco esta pregunta de vez en cuando y la respuesta aceptada nunca es la que necesito. Primero imprime el cuerpo de respuesta que es mucho texto. Agregar ---head salidas de ---head solo encabezados. En segundo lugar, al probar las URL de S3, necesitamos proporcionar un encabezado adicional -H "Access-Control-Request-Method: GET" .

Espero que esto ahorre tiempo.