Submit an extension

↑↓ move · ↵ open · Tab filter · Esc close

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
  1. The short answer
  2. What does a CORS extension for Chrome actually do?
  3. Why do you see a CORS error in the first place?
  4. When is it reasonable to use a CORS extension?
  5. What is the security risk of leaving a CORS extension on?
  6. How do you use a CORS extension safely?
  7. What are better fixes than a CORS extension?
  8. Which developer extensions help you debug CORS and API problems?
  9. Why does CORS still fail when the extension is on?
  10. How should a team handle CORS without everyone installing an extension?
  11. 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.

Common CORS messages and what they mean
Console message (paraphrased)MeaningReal fix
No Access-Control-Allow-Origin header is presentServer sent no CORS headerAdd the header on the server for your origin
Preflight response did not passThe OPTIONS request was rejected or unansweredHandle OPTIONS and return allowed methods and headers
Header value must not be the wildcard when credentials are includedYou send cookies but the server answers with *Return your exact origin and allow credentials
Request header not allowed by Access-Control-Allow-HeadersA custom header, like Authorization, is not listedAdd it to the allowed headers list
Opaque response with no-cors modeYou set the fetch mode to no-corsRemove 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.

  1. Click your avatar at the top right of Chrome, choose Add, and create a new profile called Dev. Do not sign in to sync.
  2. 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.
  3. 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.
  4. Pin the extension from the puzzle-piece menu so you can see its on/off state.
  5. Reload your app with DevTools open on the Network tab, and confirm the response now carries the permissive header.
  6. 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.

Where to fix CORS for each situation
SituationBetter approachTrade-off
You own the APIReturn Access-Control-Allow-Origin for your front-end origin, and handle OPTIONSSmall 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 callsWorks in dev only; production needs a real route
Third-party API with no CORSCall it from your backend and expose your own endpointAdds a server hop and possibly key management
Static site needing external dataUse a serverless function as a thin proxySome setup, and you own the rate limits
Reading a public fileUse a same-origin copy or the API's documented CORS-enabled endpointMight mean a build step
Testing an API by handUse curl or an API client; browsers are not neededDoes 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

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.

Why does CORS still fail when the extension is on?

Because an extension only fixes response headers. Credentials, request headers, cookies and preflight handling have their own rules that a blanket override may not meet.

Credentialed requests
When you send cookies or authorization with credentials: include, a wildcard origin is refused. The header must name your exact origin and allow credentials.
Third-party cookie limits
Chrome restricts cookies sent across sites depending on the SameSite attribute and its privacy settings. A cross-site cookie may simply not be sent, so the server sees an anonymous request.
Preflight failures
Custom headers or methods like PUT and DELETE trigger an OPTIONS request first. If the extension does not answer it or the server returns an error, the real call never happens.
Mixed content
An HTTPS page cannot call a plain HTTP API. This is blocked separately from CORS, so no CORS tool helps.
Private network requests
Calls from public sites to local or private addresses may trigger extra checks. Behaviour has been changing between Chrome versions, so check the current Chrome developer documentation.
Service workers and caching
A cached failing response can persist. Hard reload with Ctrl+Shift+R (Cmd+Shift+R on Mac) or clear the site data before retesting.

When you debug, change one thing at a time. Toggle the extension, reload with cache disabled in the Network tab, and read the failing row again. A different error message after a change tells you the change did something, which is progress.

Read the second error

Fixing the CORS error often reveals a real one underneath, such as a 401 or 404. That is good news: it means the request finally reached the server.

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.

  1. Write down which origins each environment (local, staging, production) must allow.
  2. Put the allowed-origins list in configuration, not scattered across code.
  3. Add a test that sends a request with an Origin header and checks for the expected response header.
  4. Document the dev proxy setting in the project README so new developers never search for an extension.
  5. 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

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.

Sources

  1. MDN: Cross-Origin Resource Sharing (CORS)
  2. Chrome for Developers: Extensions documentation
  3. MDN: Preflight request