How to use CORS Tester
- Enter the public API URL and the origin of the web app that will call it.
- Select the method and list the request headers the app will send (Authorization, Content-Type…).
- Run the test and read the verdict; the "Why" list names the exact header that would block the browser.
- Fix the server configuration and re-run until the verdict is Allowed.
CORS Tester features
- Sends a preflight (OPTIONS) and the actual request with your chosen Origin, method and request headers
- Verdict explained step by step: origin match, credentials, allowed methods and headers, preflight status, max-age
- Detects when a preflight is required using the CORS-safelisted rules
- Tables of preflight and actual response headers with explanations
- Warns about wildcard-with-credentials, missing Vary: Origin and "null" origins
CORS Tester example
Test a credentialed POST
Input:
URL: https://api.example.com/v1/orders · Origin: https://app.example.com · Method: POST · Headers: Authorization, Content-TypeOutput:
Result: Blocked
Preflight needed: Yes (OPTIONS) · Preflight status: 204
Access-Control-Allow-Origin is "*" but the request is credentialed; browsers reject the wildcard with credentials.
Access-Control-Allow-Headers does not list: Authorization.Frequently asked questions about CORS Tester
When does a browser send a preflight?
For any method other than GET, HEAD or POST, for request headers outside the CORS-safelisted set (Accept, Accept-Language, Content-Language, Content-Type with form/text values) and for Content-Type values such as application/json. The tool tells you whether your combination triggers OPTIONS.
Why is my request blocked even though Access-Control-Allow-Origin is *?
A wildcard is rejected when the request uses credentials (cookies or Authorization with credentials: "include"). Echo the exact origin, add Access-Control-Allow-Credentials: true and Vary: Origin instead.
Why does the tool call the API from a server instead of my browser?
A browser hides the blocked response, so you would only see a generic error. The relay performs the OPTIONS and actual requests with the Origin header you chose and returns the raw Access-Control-* headers so the verdict can be explained.
Can I test localhost or an internal API?
No. The relay refuses private, loopback and link-local addresses for safety. Expose the API through a tunnel (e.g. a public staging host) to test it.
Technical notes
The relay reproduces the browser algorithm from the Fetch Standard: the preflight is sent with Access-Control-Request-Method and Access-Control-Request-Headers, and the actual request with the Origin header. The server-side verdict is combined with a local re-evaluation so every reason is spelled out, including cases the relay treats as allowed but that fail for credentialed requests.