A
Dev-server proxy
What it is. A proxy table in the build tool — Vite, webpack-dev-server and friends forward
/api to another origin, so the browser sees one origin and CORS never enters the
conversation.
What it is genuinely good at. It is committed, reviewed and identical for everyone on the team,
it needs no browser extension, and it is the right default for a project's own local development.
Where it stops. It is per project and per dev server: a new repo means a new table and a restart.
It only sees traffic routed to that dev server, so a page calling a second host directly is outside its
reach. And it forwards — it does not rewrite responses, mock an endpoint that does not exist, or add
latency on demand.
How it relates to a browser rule. Complementary. Keep the repo's proxy table for the project's
normal development; add browser rules for the cross-environment cases that are yours alone.
B
System capture proxy
What it is. A process on your machine that the operating system or browser is told to route
through (mitmproxy is the open-source reference in this category). To read HTTPS it must act as a
certificate authority your clients trust.
What it is genuinely good at. Nothing beats it for reach: browser, mobile app, desktop app and
server process, all in one place, with full request and response inspection, breakpoints, scripting and
saved session files.
Where it stops. The setup cost is the answer. Installing a trusted root certificate changes your
machine's security posture, some clients pin certificates, and on a corporate laptop it may need
approval. It is also system-wide: it keeps intercepting when you stop debugging, and it is the kind of
tool that gets turned off before you can trust a result.
How it relates to a browser rule. A browser rule cannot do system-wide traffic and does not try
to. It gives up that reach in exchange for needing no certificate, no system setting, and nothing to
remember to switch off outside the browser.
C
API client
What it is. A standalone tool where you build a request by hand, send it, and read the response —
with collections, environments and mock servers.
What it is genuinely good at. Contract work. Designing and agreeing an endpoint shape with a
backend engineer, keeping a shared library of requests, and testing an API with no UI attached to it.
Where it stops. The response goes to the client, not to your application code. So the UI path,
the axios interceptor, the error branch and the retry logic all stay unverified. Anything your page does
with the payload — cookies, redirects, same-origin credentials, streaming — is outside what a client can
prove.
How it relates to a browser rule. Best used in sequence. Design the mock in the client, paste the
same body into a rule's mock response, and let the real page consume it. That combination covers the gap
neither tool closes alone.
D
Header-modifier extension
What it is. A lightweight browser extension that rewrites request or response headers by URL
pattern — often the declarative request-redirect APIs under the hood.
What it is genuinely good at. One-off header changes: accept-language, a cache-control override,
a debugging flag. Low concept count, instant effect.
Where it stops. The header is the whole surface. It typically does not replace a request body,
cannot answer with a mock body of your own, has no per-request delay or retry, and cannot touch a
WebSocket connection.
How it relates to a browser rule. This extension uses the same network-layer mechanism for the
subset of rules that only rewrite a URL, and adds the service-worker channel on top when a rule needs
header, body or response rewriting. So it is a superset in practice, at the cost of more to learn.
E
Editing the application's own config
What it is. The honest option: change the base URL, the environment file, or the token in source,
rebuild, and let the app call the other environment directly.
What it is genuinely good at. It is reproducible for everyone, it works in CI, and it survives
your machine being wiped. When the difference is permanent, this is the correct place for it.
Where it stops. A rebuild cycle per attempt, a diff you must remember to revert, and the CORS
question you cannot avoid — the page now calls a foreign origin, so the backend must allow it, which
means a gateway change and a redeploy.
How it relates to a browser rule. A rule is the temporary version of the same edit, applied
outside the source tree. Same effect on the request, none of the revert risk in review.