CORX vs corsproxy.io

Last checked 2026-09-17

corsproxy.io: Website · Documentation

Both are CORS proxies, and both will unblock a browser request. The difference is what happens to the upstream credential: corsproxy.io is a hosted service you sign up for, CORX is a Worker you deploy whose point is holding an API key the browser never sees.

See it live: run a real injection from the landing demo.

Test any URL's CORS in your browser

TopicCORXcorsproxy.io
Auth modelPer-key (`X-Api-Key` or Bearer), keyless access for granted origins, or a hosted instance's shared public key. Keys are stored as hashes in your own D1.Account and API key on every call (`?key=…`), the free tier included; domain authorization on paid plans.
Upstream secretsHeader and query rules live in D1 — AES-256-GCM ciphertext when `INJECTION_KEK` is set — and are applied server-side, only on the hosts the key allows. The browser never receives the value.No server-side secret store. Header overrides are query parameters (`reqHeaders=authorization:Bearer TOKEN`), so the value comes from the caller — their own FAQ says to keep upstream secrets out of browser code.
Self-hostingMIT, one Cloudflare Worker with D1 and R2, deployed to your own account; the free plan covers small deployments.Closed source, hosted only: there is no self-host path.
CachingR2 GET cache, adjusted per request with `corx-ttl` / `corx-no-cache` and capped per key; keys that inject request headers never share it, and a key's resolved response header rules are part of the cache key.Edge cache with a 1-hour default TTL; `ttl=` overrides need the Production plan, and the cache is per data centre rather than global.
Request loggingEvery request lands in your D1 — target, host, status, latency, caller origin, key, IP, country. The raw window is yours to set (30 days by default, `LOG_RETENTION_DAYS`) and logging can be switched off entirely (`LOG_REQUESTS=false`); the daily aggregate keeps the trend.Their privacy policy lists the requested URL, user agent, IP, timestamps and request counts, plus your account email. Bodies and headers are not logged.
LimitsYour own per-key rate limits and daily quotas, or the shared public tier's. Self-hosted, the ceiling is your Cloudflare plan.Free: 10,000 requests + 1 GB per month, 1 MB files, browser requests only. Hobby $5: 250k requests + 25 GB. Production $29: unlimited* requests, 1 GB files.
PriceFree and MIT-licensed. You pay Cloudflare for what the Worker serves; there is no subscription and no seat count.$0 free tier, $5 Hobby, $29 Production per month — and free unlimited for open-source and educational projects on request.
Time to first requestDeploy a Worker to your own account (about ten minutes), or copy a hosted instance's public key and send GET/HEAD inside its daily quota.Create an account, prefix the URL, done: no deployment and no infrastructure to own.They win this rowAccepted trade-off
Beyond proxyingProxying only: fetch, cache, inject, log, response header rules (strip `X-Frame-Options` / CSP for hosts you control), text re-encoding (`corx-charset`) and a JSON envelope (`corx-wrap`), plus a public CORS tester. No image transforms, scraping or file conversion.Image transformations (beta), a web-scraping API, header rewrites and file conversion on the paid plans.They win this rowAccepted trade-off
AvailabilitySelf-hosted: as available as your own Cloudflare account. The public instance is best-effort, with no SLA and no support commitment.99.9% monthly uptime commitment on Hobby, 99.99% on Production; the free tier is best-effort with no SLA.They win this rowAccepted trade-off

Where corsproxy.io wins

If your browser app has no secret to hide, corsproxy.io is the lower-effort choice: no deployment, a free tier, a support address, an uptime commitment on paid plans and extras like image transforms and a scraping API. When CORX's secret injection is not what you need, their hosted plan is simply less to run.

Sources

Every corsproxy.io cell above comes from their own documentation, read on the date shown — follow the links and check them. The CORX column describes this repository (README.md and FEATURES.md) and the same day's code.

Both are about a line of code away. Try the public key on the landing page first, and self-host when the traffic matters. Back to the landing page