P PasteCode
Prompt

Prompt zum Erstellen eines Cloudflare Worker API-Proxys

Kopieren-Einfügen AI-Prompt zum Erstellen eines Cloudflare Workers, der externe API-Aufrufe proxyt und ratenbegrenzt, Auth-Header hinzufügt und Antworten zwischenspeichert.

CursorClaude CodeCodexWindsurf CloudflareTypeScript
.md .json Schwierigkeit: Mittel Aktualisiert 8. Juni 2026

Verwenden Sie diesen Prompt, um einen Cloudflare Worker zu erstellen, der vor einer externen API sitzt, Auth-Header injiziert, das Raten-Limit pro IP mit Workers KV durchsetzt und Antworten zwischenspeichert – sodass Clients nie Ihren Upstream-API-Schlüssel sehen.

Haupt-Prompt

Main Prompt
You are building a Cloudflare Worker using TypeScript and the Workers runtime (not Node.js).
The Worker will proxy requests to an upstream API (e.g., OpenAI at https://api.openai.com).
Task: create a production-ready API proxy Worker.
Requirements:
- Use `wrangler` v3 for local dev. Scaffold with `bun create cloudflare@latest` and choose
"Hello World" Worker with TypeScript.
- Upstream URL: read from a Wrangler secret `UPSTREAM_URL` (string).
- Auth: inject `Authorization: Bearer ${env.UPSTREAM_API_KEY}` on every proxied request,
where `UPSTREAM_API_KEY` is a Wrangler secret. Never expose this header to the client.
- CORS: allow only origins in `env.ALLOWED_ORIGINS` (comma-separated string secret).
Return a `403` for disallowed origins. Handle preflight OPTIONS requests.
- Rate limiting: use Workers KV binding `RATE_LIMIT_KV`.
- Key: `rl:${ip}` where ip is `request.headers.get('CF-Connecting-IP')`.
- Value: request count for the current UTC minute (TTL = 60 s).
- Limit: 60 requests/minute per IP. Return `429` with `Retry-After: 60` if exceeded.
- Caching: for GET requests, check `caches.default` before proxying upstream. Cache
successful responses with `Cache-Control: public, max-age=300`.
- Strip the following headers from the upstream response before returning to the client:
`x-powered-by`, `server`, `cf-ray`.
- Wrangler config: declare the KV namespace binding and all secrets in `wrangler.toml`.
- Do NOT use Node.js APIs (`fs`, `path`, `Buffer`) — Workers runtime only.
Stop and list all planned files before writing code.

Implementierungshinweise

  • Cloudflare Workers empfangen ein Request und geben ein Response zurück – vermeiden Sie express-artige Muster.
  • caches.default ist der Cloudflare-Edge-Cache; er funktioniert nur in der Produktion. Verwenden Sie MINIFLARE_CACHE für lokale Entwicklungstests oder mocken Sie den Cache.
  • CF-Connecting-IP wird von Cloudflare injiziert – es ist vom öffentlichen Internet aus nicht spoofbar, aber testen Sie lokal mit einer hartcodierten Fallback-IP.
  • Wrangler-Secrets werden mit wrangler secret put UPSTREAM_API_KEY gesetzt – speichern Sie sie niemals in wrangler.toml oder in committed .env-Dateien.

Erwartete Dateiänderungen

wrangler.toml (new)
src/index.ts (new — Worker entrypoint)
src/cors.ts (new — CORS helper)
src/rate-limit.ts (new — KV rate limiter)
package.json (new)
tsconfig.json (new)
.dev.vars (new — local dev secrets, gitignored)
.gitignore (edited — add .dev.vars)

Akzeptanzkriterien

  • wrangler dev startet ohne Fehler und leitet einen GET / an die Upstream-URL weiter.
  • Eine IP, die 61 Anfragen in einer Minute sendet, erhält beim 61. Request einen 429.
  • Eine Anfrage von einer nicht erlaubten Domain erhält einen 403.
  • Der Authorization-Header erscheint weder in der Antwort noch in einem client-sichtbaren Header.
  • wrangler deploy ist erfolgreich und der Worker ist live auf workers.dev.

Testbefehle

Terminal window
wrangler dev &
# test normal proxy
curl http://localhost:8787/ -H "Origin: https://myapp.com"
# test CORS rejection
curl http://localhost:8787/ -H "Origin: https://evil.com"
# test rate limit (requires 61 rapid requests)
for i in $(seq 1 62); do curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8787/; done

Häufige KI-Fehler

  • Verwendung von process.env anstelle des env-Parameters, der an den Worker-fetch-Handler übergeben wird.
  • Vergessen, OPTIONS-Preflight-Anfragen zu behandeln, was CORS für POST/PUT-Aufrufe unterbricht.
  • Speichern von UPSTREAM_API_KEY in wrangler.toml als einfache Variable anstelle eines Secrets.
  • Verwendung von node:buffer oder anderen Node.js-Builtins, die in der Workers-Laufzeitumgebung nicht verfügbar sind.

Fix-Prompt

Fix Prompt
The Worker fails with a runtime error or leaks the API key. Fix in order:
1. Replace `process.env.X` with `env.X` everywhere — Workers use the `env` handler parameter.
2. Add an OPTIONS handler before the proxy logic that returns the CORS headers with a 204 status.
3. Move `UPSTREAM_API_KEY` from `wrangler.toml` [vars] to a secret: `wrangler secret put UPSTREAM_API_KEY`.
Show only the corrected diff.