To test CORS using curl, you can simulate both preflight (OPTIONS) and actual GET/POST requests by setting custom headers.
✅ 1. Test Preflight (OPTIONS) Request
This simulates a browser preflight request:
curl -i -X OPTIONS https://x.x.com \
-H "Origin: https://example.com" \
-H "Access-Control-Request-Method: GET" \
-H "Access-Control-Request-Headers: Content-Type, Authorization"✅ You should see response headers like:
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization
Access-Control-Allow-Credentials: true✅ 2. Test Actual GET Request with CORS
This simulates a CORS request from a browser-based client:
curl -i -X GET https://x.x.com \
-H "Origin: https://example.com"You should see a successful HTTP 200 (or similar) with:
Access-Control-Allow-Origin: *✅ 3. Test CORS Denial Case (For Comparison)
To validate that CORS is working as expected (not always open), try from an origin that should be blocked (if you configured a specific origin):
curl -i -X GET https://x.x.com \
-H "Origin: https://unauthorized.com"You should not see Access-Control-Allow-Origin in the response if the origin is restricted.
🧪 Optional: Verbose Debugging
curl -i -v -X OPTIONS https://x.x.com \
-H "Origin: https://example.com" \
-H "Access-Control-Request-Method: GET"This shows SSL negotiation, redirects, and response headers line by line.