How to use
In the Check tab, enter the page origin, the method, the request header names, the Content-Type value and whether credentials are sent.
Paste the headers of the preflight (OPTIONS) response and of the actual response (GET or another real response). You can copy them from the Network tab of developer tools.
Read the verdict and the ✓ and ✗ for each header with its fix. If you leave a response empty, the tool says the decision cannot be made yet.
In the Make a setting tab, choose the allowed origins, methods and headers. The tool shows the response headers and examples for nginx, Apache, Express and Next.js.
What it does
Checks whether a preflight is needed
Follows the Fetch Standard: the method must be GET, HEAD or POST; the request headers must be safelisted (such as Accept); Content-Type must be application/x-www-form-urlencoded, multipart/form-data or text/plain.
Per-header CORS checks
Checks Access-Control-Allow-Origin against the request Origin (scheme, port and host name mismatches are explained separately), Allow-Credentials, Allow-Methods, Allow-Headers (the meaning of * and the Authorization exception), Expose-Headers and Vary: Origin, one row each.
Common mistakes explained
Shows the fix for * with credentials, a trailing slash in the origin, null origins, more than one Allow-Origin value, and Set-Cookie in Expose-Headers.
Settings for nginx, Apache, Express and Next.js
Builds settings that check the request Origin against your allowed list and return only a match. The preflight is answered with 204. The Express example does not use the cors package.
Use cases
- A fetch call fails with “blocked by CORS policy” and you want to know which Access-Control header causes it
- A JSON POST fails at the preflight and you need to know whether Content-Type or Authorization is the reason
- A request with cookies fails because the server answers with *, and you want the reason
- You need to allow several site origins in nginx or Express
- You want to know whether Vary: Origin is needed for caching
Supported formats
Input
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Deciding whether a preflight is needed (Fetch Standard) | Supported | — |
| Per-header CORS checks with fixes | Supported | — |
| Settings for nginx, Apache, Express and Next.js | Supported | — |
| Fetching the real response headers from a URL | Not supported | No network access. Paste the response headers instead |
| Reproducing the browser’s behaviour exactly | Not supported | The verdict follows the specification. Small differences between browsers are not checked |
| Checking authentication or the API body | Not supported | Only the CORS response headers are read |
| Blocking requests from outside browsers (such as curl) | Not supported | CORS is a mechanism that limits what browsers let a page read |
Limits & notes
- The verdict is based only on the headers you paste. Results in a real browser can differ because of caching, extensions or the browser version.
- The upper limit for how long a preflight result may be reused (Access-Control-Max-Age) differs between browsers. This tool does not state a number for it.
- The request origin must be http or https (or null). Access-Control-Allow-Origin is compared literally with the request origin, so a trailing slash or a different letter case does not match.
- Input limits: 20,000 characters per box, and up to 200 lines of headers.
- Example domains are placeholders. Where a setting goes depends on your proxy, CDN or framework.
- Works on phones too, but PC is recommended for long pasted headers.
Privacy & safety
The headers, origins and settings you enter are processed only in your browser. Nothing is sent to or stored on a server.
FAQ
Why does a CORS error happen?
I sent * in Access-Control-Allow-Origin, but a request with credentials still fails. Why?
What is a preflight (OPTIONS) request?
How do I allow several site origins?
Why is Vary: Origin needed?
Related tools
CSP Studio
Paste a Content-Security-Policy header or meta tag to see unsafe-inline, unsafe-eval, wildcards and missing object-src or base-uri, ranked high, medium or low, with a suggested policy. Generation and hash calculation are included.
Cookie / Set-Cookie Studio
Paste a Cookie header or Set-Cookie lines to see each attribute (Expires, Max-Age, Domain, Path, Secure, HttpOnly, SameSite, Partitioned) in a table, with points to check. The form also builds a Set-Cookie header and framework code.
curl Converter
Paste “Copy as cURL” from Chrome or Firefox to see the method, URL, headers, cookies and body in tables, then convert to 12 kinds of code. The request is never sent and everything runs in your browser. Authorization and cookies can be hidden before you share.
Cache-Control Studio
Paste a Cache-Control header to see how long the browser and a CDN keep the response, and whether it must be revalidated before use. It flags contradictions such as no-store with max-age, and builds the header for common uses.
HTML Inspector
Paste a page’s HTML to review SEO and accessibility basics at a glance: heading structure, meta tags, Open Graph, image alt text, links and structured data — with a preview of how it may look in search and on social media.
robots.txt Tester
Paste a robots.txt to see instantly whether a URL is allowed or blocked for Googlebot or AI crawlers, and which line decided it. Misspellings and directives Google ignores are flagged too.
Last updated: