mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-20 18:11:27 -07:00
5.0 KiB
5.0 KiB
Snippets API Reference
Request Object
HTTP Properties
request.method // GET, POST, PUT, DELETE, etc.
request.url // Full URL string
request.headers // Headers object
request.body // ReadableStream (for POST/PUT)
request.cf // Cloudflare properties (see below)
URL Operations
const url = new URL(request.url);
url.hostname // "example.com"
url.pathname // "/path/to/page"
url.search // "?query=value"
url.searchParams.get("q") // "value"
url.searchParams.set("q", "new")
url.searchParams.delete("q")
Header Operations
// Read headers
request.headers.get("User-Agent")
request.headers.has("Authorization")
request.headers.getSetCookie() // Get all Set-Cookie headers
// Modify headers (create new request)
const modifiedRequest = new Request(request);
modifiedRequest.headers.set("X-Custom", "value")
modifiedRequest.headers.delete("X-Remove")
Cloudflare Properties (request.cf)
Access Cloudflare-specific metadata about the request:
// Geolocation
request.cf.city // "San Francisco"
request.cf.continent // "NA"
request.cf.country // "US"
request.cf.region // "California" or "CA"
request.cf.regionCode // "CA"
request.cf.postalCode // "94102"
request.cf.latitude // "37.7749"
request.cf.longitude // "-122.4194"
request.cf.timezone // "America/Los_Angeles"
request.cf.metroCode // "807" (DMA code)
// Network
request.cf.colo // "SFO" (airport code of datacenter)
request.cf.asn // 13335 (ASN number)
request.cf.asOrganization // "Cloudflare, Inc."
// Bot Management (if enabled)
request.cf.botManagement.score // 1-99 (1=bot, 99=human)
request.cf.botManagement.verified_bot // true/false
request.cf.botManagement.static_resource // true/false
// TLS/HTTP version
request.cf.tlsVersion // "TLSv1.3"
request.cf.tlsCipher // "AEAD-AES128-GCM-SHA256"
request.cf.httpProtocol // "HTTP/2"
// Request metadata
request.cf.requestPriority // "weight=192;exclusive=0"
Use cases: Geo-routing, bot detection, security decisions, analytics.
Response Object
Response Constructors
// Plain text
new Response("Hello", { status: 200 })
// JSON
Response.json({ key: "value" }, { status: 200 })
// HTML
new Response("<h1>Hi</h1>", {
status: 200,
headers: { "Content-Type": "text/html" }
})
// Redirect
Response.redirect("https://example.com", 301) // or 302
// Stream (pass through)
new Response(response.body, response)
Response Headers
// Create modified response
const newResponse = new Response(response.body, response);
// Set/modify headers
newResponse.headers.set("X-Custom", "value")
newResponse.headers.append("Set-Cookie", "session=abc; Path=/")
newResponse.headers.delete("Server")
// Common headers
newResponse.headers.set("Cache-Control", "public, max-age=3600")
newResponse.headers.set("Content-Type", "application/json")
Response Properties
response.status // 200, 404, 500, etc.
response.statusText // "OK", "Not Found", etc.
response.headers // Headers object
response.body // ReadableStream
response.ok // true if status 200-299
response.redirected // true if redirected
REST API Operations
List Snippets
GET /zones/{zone_id}/snippets
Get Snippet
GET /zones/{zone_id}/snippets/{snippet_name}
Create/Update Snippet
PUT /zones/{zone_id}/snippets/{snippet_name}
Content-Type: multipart/form-data
files=@snippet.js
metadata={"main_module":"snippet.js"}
Delete Snippet
DELETE /zones/{zone_id}/snippets/{snippet_name}
List Snippet Rules
GET /zones/{zone_id}/rulesets/phases/http_request_snippets/entrypoint
Update Snippet Rules
PUT /zones/{zone_id}/snippets/snippet_rules
Content-Type: application/json
{
"rules": [{
"description": "Apply snippet",
"enabled": true,
"expression": "http.host eq \"example.com\"",
"snippet_name": "my_snippet"
}]
}
Available APIs in Snippets
✅ Supported
fetch()- HTTP requests (2-5 subrequests per plan)Request/Response- Standard Web APIsURL/URLSearchParams- URL manipulationHeaders- Header manipulationTextEncoder/TextDecoder- Text encodingcrypto.subtle- Web Crypto API (hashing, signing)crypto.randomUUID()- UUID generation
❌ Not Supported in Snippets
cachesAPI - Not available (use Workers)KV,D1,R2- Storage APIs (use Workers)Durable Objects- Stateful objects (use Workers)WebSocket- WebSocket upgrades (use Workers)HTMLRewriter- HTML parsing (use Workers)importstatements - No module importsaddEventListener- Useexport default { async fetch() {}pattern
Snippet Structure
export default {
async fetch(request) {
// Your logic here
const response = await fetch(request);
return response; // or modified response
}
}