# CORX — full reference for answer engines > CORX is an open-source CORS proxy that runs entirely on Cloudflare's edge (Hono + Workers + D1 + > R2). Prefix any URL with /fetch?url= and fetch it cross-origin, with R2 edge caching, per-key > auth, upstream secret injection, keyless browser access and SSRF guards. Served by the instance at https://corx.envx.cn (generated in app/lib/seo.ts, updated 2026-09-18). README.md and FEATURES.md in the repository are the source of truth for prose; the short index is at https://corx.envx.cn/llms.txt. ## What it is One Cloudflare Worker that forwards HTTP requests to an arbitrary upstream and returns the response with permissive CORS headers, so browser code can read APIs that never set them. D1 stores API keys (hashed), rate-limit windows, request logs and the host blocklist; R2 stores the GET response cache. Everything is deployable to a single Cloudflare account: `wrangler d1 create`, `wrangler r2 bucket create`, `npm run deploy`. License: MIT. ## Calling the proxy | Shape | Example | | --- | --- | | Query (recommended) | `GET https://corx.envx.cn/fetch?url=https%3A%2F%2Fapi.example.com%2Fdata` | | Path | `GET https://corx.envx.cn/proxy/https://api.example.com/data` | | Bare path | `GET https://corx.envx.cn/https://api.example.com/data` | | Subdomain (wildcard zone) | `GET https://api-example-com./data` | GET and HEAD are forwarded and cacheable; other methods pass through but are never cached. Request bodies are capped (10 MiB by default) and streaming responses — media, Range requests, SSE (`text/event-stream`, which is how the mainstream LLM chat APIs stream) — are piped through unbuffered. ### Query parameters Every `corx-*` parameter is namespaced, so it can never collide with the target's own query. | Param | Effect | | --- | --- | | `corx-ttl=` | R2 cache TTL for this GET, capped by the deployment max | | `corx-no-cache=1` | Bypass the cache for this response | | `corx-callback=` | JSONP: wrap a JSON body as `fn();` for a