Request and response headers
Trusted platform headers Easel adds for routing, observability, security, and cache diagnostics.
Easel adds a small set of headers to requests your code receives and to responses it returns. Depend only on the headers listed here. Other internal headers can change and are removed before they reach you.
Request headers
These are set by Easel on requests that reach your function. Easel overwrites any client-supplied value, so you can trust them.
| Header | Value |
|---|---|
X-Easel-Id | Unique request ID, also returned on the response |
X-Deployment-Id | ID of the deployment serving the request |
X-Easel-Deployment-Environment | production, preview, or development |
X-Easel-Function-Region | Region the function runs in, such as iad; see Regions |
X-Forwarded-Host | Hostname the visitor requested, before rewrites |
X-Forwarded-Proto | Protocol the visitor used, normally https |
Use X-Forwarded-Host for canonical URLs and auth callbacks, and validate it
against your own domains before building security-sensitive URLs. Treat
X-Forwarded-For as proxy metadata, not proof of a client's identity. Use
environment variables, not these
headers, for configuration.
These headers exist only on deployed requests, not in local development, and only when the request reaches a function.
In Next.js, read them with headers() from next/headers.
Response headers
| Header | When | Value |
|---|---|---|
X-Easel-Id | Every response | Request ID, such as a UUID; search for it in Requests |
X-Easel-Cache | Cacheable paths | HIT, STALE, MISS, or BYPASS; see Caching |
Age | Some cached responses | Seconds in cache; may be absent |
Server | Every response | Easel |
Strict-Transport-Security | Every response | See HTTPS |
X-Robots-Tag | Preview deployments | noindex, nofollow, noarchive |
Content-Encoding | Compressed responses | br or gzip; see Compression |
X-Easel-Firewall-Action | The firewall acted on the request | The action taken |
X-Easel-Firewall-Rule-Id | A custom rule matched | The rule's ID |
X-Easel-Mitigated | A challenge was served | challenge |
X-Easel-Challenge-Token | A challenge was served | Token the challenge page submits when it verifies the visitor |
X-Robots-Tag keeps previews out of search results but doesn't restrict
access. Use deployment protection for
that. The firewall headers are for your own diagnostics; see
Firewall. A challenge is served as a 429 HTML page
with Cache-Control: no-store; see
Attack challenge mode.
Headers Easel changes
CDN-Cache-ControlandVercel-CDN-Cache-Controlare consumed and removed.Cache-Controlcontainings-maxageis rewritten for browsers. See Caching.Server-Timingis replaced with Easel's own timings.- Hop-by-hop headers, such as
Connection,Keep-Alive, andTransfer-Encoding, apply to one connection and aren't forwarded.
Custom headers
Return your own headers from your code or set them in framework configuration.
Use your own prefix, such as X-My-App-Version. Don't set the headers listed on
this page; Easel replaces or removes them.
Headers show up in logs and traces. Don't put secrets or personal data in
custom headers, and correlate events by X-Easel-Id instead of copying
Authorization or Cookie values into logs. Header and URL size limits are in
Limits.
Inspect headers
Use curl -IL to follow redirects and see the headers on each hop.