How-to guide
CORS Extensions for Chrome: When to Use Them (and When Not To)
How-to
CORS Extensions for Chrome: When to Use Them (and When Not To)
On this page
- The short answer
- What does a CORS extension for Chrome actually do?
- Why do you see a CORS error in the first place?
- When is it reasonable to use a CORS extension?
- What is the security risk of leaving a CORS extension on?
- How do you use a CORS extension safely?
- What are better fixes than a CORS extension?
- Which developer extensions help you debug CORS and API problems?
- Why does CORS still fail when the extension is on?
- How should a team handle CORS without everyone installing an extension?
- Frequently asked
The short answer
A CORS extension for Chrome adds or rewrites Access-Control-Allow-Origin response headers so your browser stops blocking cross-origin requests. It is fine as a short, deliberate workaround while developing against an API you do not control. Leave it on and it weakens protection on every site you visit, so toggle it off afterwards.
What does a CORS extension for Chrome actually do?
It changes the response headers your browser sees, so a request that the server did not approve for your origin gets through anyway. It does not fix the server. It only makes Chrome look away.
CORS, cross-origin resource sharing, is a browser rule. When a page at one origin calls an API at another, Chrome checks the response for an Access-Control-Allow-Origin header that permits the caller. No header, and the response is hidden from your JavaScript and the console shows a CORS error. The MDN guide to CORS explains the model in full.
A CORS extension sits between the network and the page. It adds permissive headers, such as Access-Control-Allow-Origin: *, to responses, and often handles the preflight OPTIONS request too. Manifest V3 extensions do this with Chrome's request-rewriting APIs.
Two things it will not do. It will not help other people who use your site, because the change exists only in your browser. And it will not touch the underlying server, so the moment you ship, the same error comes back for every real user.
CORS is not a server-side firewall
CORS only stops browsers from reading cross-origin responses. It does not stop a script, curl or Postman from calling the API. That is why turning it off in your browser tells you nothing about whether your API is secure.
Why do you see a CORS error in the first place?
The server's response is missing, or has the wrong, CORS headers for the origin you are calling from. Knowing which case you are in tells you the correct fix.
| Console message (paraphrased) | Meaning | Real fix |
|---|---|---|
| No Access-Control-Allow-Origin header is present | Server sent no CORS header | Add the header on the server for your origin |
| Preflight response did not pass | The OPTIONS request was rejected or unanswered | Handle OPTIONS and return allowed methods and headers |
| Header value must not be the wildcard when credentials are included | You send cookies but the server answers with * | Return your exact origin and allow credentials |
| Request header not allowed by Access-Control-Allow-Headers | A custom header, like Authorization, is not listed | Add it to the allowed headers list |
| Opaque response with no-cors mode | You set the fetch mode to no-cors | Remove that mode; it does not bypass CORS |
Check the Network tab in DevTools before you install anything. Open DevTools with F12 or Ctrl+Shift+I (Cmd+Option+I on Mac), reload, click the failed request and read the response headers. Often the API returned a normal 200, and the headers alone caused the block.
Also check that the server error is not a disguised CORS error. A 500 or a crash on the server often lacks CORS headers too, so the browser reports a CORS problem when the real problem is a server bug. Test the URL directly in a new tab or with curl before blaming CORS.
When is it reasonable to use a CORS extension?
Use one only when you control your own machine and cannot change the server, and only for the period you need it. That narrows the honest cases to a handful.
- Prototyping a front end against a third-party API that has no CORS headers, before you build a backend proxy.
- Reproducing a bug report on a dev or staging site whose server config is owned by another team.
- Quickly checking whether a failure is really CORS or something else, by removing CORS from the equation for one page load.
- Local static files or a demo page that has to call a public endpoint for a workshop.
- Working on a browser extension or userscript that fetches from many origins during development.
In every one of those, the extension is a scaffold. If the feature is going to production, the fix must land on the server or in a proxy you run, or the app will fail for every visitor.
Developers who use Chrome all day may find it helpful to enable developer features first. The guide on how to enable developer mode in Chrome covers loading unpacked extensions, which is how some CORS tools are built and tested.
Set a stop condition
Decide before you install what will make you turn it off: the server team ships the header, you finish the demo, or the day ends. A tool with no stop condition stays on for months.
What is the security risk of leaving a CORS extension on?
With a blanket CORS override on, any website you open can read responses from other sites that would normally be walled off. That includes sites where you are logged in.
The same-origin policy is what keeps a random page from reading your webmail or bank pages through JavaScript. A tool that forces permissive headers everywhere removes that wall. A malicious page could then call an internal site or a signed-in service and read the response, using your cookies.
Extensions that do this need broad permissions, usually access to all websites and the ability to modify network requests. Read those closely on the permissions explainer before installing. An extension that can rewrite every response can do more than add a header, and you are trusting its author and every future update.
Ways this goes wrong
- You leave it on for weeks, then browse ordinary sites with the wall down.
- A dev tool on an internal network exposes admin pages to any tab in your browser.
- An update to the extension changes behaviour or ownership, and the new version reads more than you expected.
- Copies with similar names appear in the store; one bad copy is enough.
The mitigations are boring and effective. Use an extension that can be limited to specific sites, keep it off by default, and use a separate Chrome profile just for development so your personal logins are not in the same browser.
Do not use it in your everyday profile
Put the extension in a dev-only Chrome profile with no personal logins, and turn it off when you are not actively testing. That one habit removes most of the risk.
How do you use a CORS extension safely?
Install it in a dedicated profile, restrict it to the domains you are working on, and switch it off when finished. The exact controls vary by extension, so check what yours offers.
- Click your avatar at the top right of Chrome, choose Add, and create a new profile called Dev. Do not sign in to sync.
- Open the Chrome Web Store in that profile and choose a CORS extension, such as CORS Unblock. Read its permissions and the publisher name. Prefer one that lists its source code.
- After installing, go to
chrome://extensions, click Details, and set Site access to On specific sites if the extension allows it, then add only your dev domains. - Pin the extension from the puzzle-piece menu so you can see its on/off state.
- Reload your app with DevTools open on the Network tab, and confirm the response now carries the permissive header.
- When finished, toggle it off, or remove it. Do not leave it as a startup habit.
Check that it works for the right reason. If your request has credentials, a wildcard header will still fail unless the extension echoes your specific origin and sets Access-Control-Allow-Credentials. If it does not, the error persists and you will assume the tool is broken.
Search results for this topic are full of tools with near-identical names. Choose by permissions, update history and publisher, not by the number of results.
The extension might be redundant
If you are already running a local dev server, a proxy setting there solves the problem with no browser tool and no security cost. See the proper fixes below.
What are better fixes than a CORS extension?
Fix the server, or route the request through a proxy you control. Both work for every user, not just your browser.
| Situation | Better approach | Trade-off |
|---|---|---|
| You own the API | Return Access-Control-Allow-Origin for your front-end origin, and handle OPTIONS | Small config change; be careful with wildcards |
| Local dev server (Vite, webpack, Next and similar) | Use the dev server's proxy option so the browser sees same-origin calls | Works in dev only; production needs a real route |
| Third-party API with no CORS | Call it from your backend and expose your own endpoint | Adds a server hop and possibly key management |
| Static site needing external data | Use a serverless function as a thin proxy | Some setup, and you own the rate limits |
| Reading a public file | Use a same-origin copy or the API's documented CORS-enabled endpoint | Might mean a build step |
| Testing an API by hand | Use curl or an API client; browsers are not needed | Does not test the browser flow |
If you own the API, allow specific origins from a list rather than reflecting whatever origin arrives. Reflecting any origin with credentials enabled recreates the same hole an extension opens, but for every visitor.
Another option is launching a separate Chrome instance with web security disabled by a command-line flag. It is a heavier hammer than an extension and just as dangerous when used for normal browsing, so only use it in a throwaway profile, and never for regular browsing.
If your work is broader than a single error, the developer tools category and the extensions picked for developers list the debugging tools worth having installed all the time.
Which developer extensions help you debug CORS and API problems?
Most of the work is reading requests, not overriding them. A few tools in the directory make that faster; only the first one below changes CORS headers, and the others just help you read what happened.
CORS Unblock is the one CORS override in our directory: it adds CORS headers to responses so local development requests are not blocked. Apply the safety checks above to it like any other tool. The rest of the list sits around it and is worth having in your dev profile.
A CORS override plus companions for API debugging
-
CORS UnblockFree
Developer Tools
Free. Adds CORS headers to responses so local development requests are not blocked. Catch: it rewrites responses in your browser only, so use it in a dev-only profile, limit it to your dev sites if it allows, and switch it off afterwards.
-
JSON FormatterFree
Developer Tools
Free. Pretty-prints JSON when you open an API URL directly in a tab, which is the fastest way to confirm the server itself returns data. It does not change headers.
-
Cookie-EditorFree
Developer Tools
Free. View and edit cookies, useful when a credentialed request fails because the cookie is missing, expired or has the wrong SameSite setting.
-
Clear CacheFree
Developer Tools
Free. Clears cache and cookies in one click. Chrome can cache a preflight result, so clear it after the server headers change. It also logs you out of sites.
-
Developer Tools
Free. Inspect components and props to see whether the app or the network is the source of a failing call. Only relevant if you build with React.
-
Developer Tools
Free. An alternative cookie editor with protect and block options, handy when you need to lock a cookie while testing.
Chrome's own DevTools remain the main instrument. The Network tab shows the preflight and the actual request as separate rows, with headers, status and timing for each. The Console names the exact CORS rule that failed, which tells you which header to add.
If AI helpers are part of your workflow, the roundups of AI tools for developers cover tools that can read error messages and suggest the server change. Never paste real tokens into them.
How should a team handle CORS without everyone installing an extension?
Fix it once in shared config, so nobody needs a browser hack. A team that all runs the same override has a shared blind spot, and production users pay for it.
- Write down which origins each environment (local, staging, production) must allow.
- Put the allowed-origins list in configuration, not scattered across code.
- Add a test that sends a request with an
Originheader and checks for the expected response header. - Document the dev proxy setting in the project README so new developers never search for an extension.
- Review CORS changes like any other security change, since a wildcard with credentials can leak data.
Project managers and analysts who only need to view a broken page can usually skip all this. Ask a developer for a staging URL with the right headers instead. The guide to AI tools for project managers shows where a technical block should be escalated rather than hacked around.
Students learning web development hit CORS early and often. It helps to know that the error is protecting them from a real class of attack, and that an extension is a learning aid, not the answer. Setting up a tiny proxy is a better lesson than installing a tool.
Extensions mentioned in this guide
- CORS UnblockAdds CORS headers to responses so local development requests are not blocked
- JSON FormatterPretty-print JSON right in the browser.
- Cookie-EditorView, edit, create, and delete browser cookies for any site right from the toolbar
- Clear CacheClear cache and cookies in one click.
- React Developer ToolsInspect React component trees and props.
- EditThisCookie V3Add, edit, search, protect, and block cookies with the classic EditThisCookie toolset.
- WappalyzerSee the tech stack behind any website.
Frequently asked
What does a CORS extension for Chrome do?
It adds or rewrites Access-Control-Allow-Origin headers on responses so Chrome stops blocking cross-origin requests. It only changes your own browser, not the server.
Is it safe to use a CORS extension in Chrome?
Only for short, deliberate development work. While it is on, sites you visit can read responses that Chrome would normally block, so use a dev-only profile and switch it off afterwards.
How do I disable CORS in Chrome?
You cannot switch it off in settings. You can use an extension that rewrites headers or launch a throwaway Chrome profile with web security disabled by a command-line flag. Both are unsafe for normal browsing.
Why am I getting a CORS error in Chrome?
The API response lacks an Access-Control-Allow-Origin header that permits your page's origin, or the preflight request failed. Check the response headers in the DevTools Network tab.
Will a CORS extension fix the problem for my users?
No. The extension only changes your browser. Your users will still hit the error until the server or a proxy sends the right headers.
Why does CORS still fail with the extension enabled?
Credentialed requests need an exact origin, not a wildcard. Preflight, mixed content and blocked cookies also cause failures a header override cannot fix.
What is a preflight request?
An automatic OPTIONS request Chrome sends before requests with custom headers or methods like PUT or DELETE. The server must answer it with the allowed methods and headers.
What is the difference between a CORS extension and a proxy?
An extension fixes headers in your browser only. A proxy routes the call through a server you control, so it works for every user.
Does the no-cors fetch mode bypass CORS?
No. It sends the request but returns an opaque response your code cannot read. It is not a way to get the data.
Should I leave a CORS extension on all the time?
No. Leave it off by default and enable it only while testing, ideally limited to specific sites in a separate profile.
How can I fix CORS on my own API?
Return Access-Control-Allow-Origin for your front-end's specific origin, answer OPTIONS requests, and list any custom headers you allow. Avoid a wildcard when you use cookies.
Are there Chrome extensions to help debug API requests?
Yes. A JSON viewer, a cookie editor and DevTools cover most debugging, and none of them alter CORS headers. For a header override, CORS Unblock is listed in the directory. See the companions list in this guide.