Request and response headers
Trusted platform headers Easel adds for routing, observability, security, and cache diagnostics.
Easel adds a small set of trusted headers to requests and responses for routing, observability, security, and cache diagnostics.
Use documented headers when application behavior depends on platform metadata. Undocumented internal headers may change without notice and are not a stable interface.
Request headers
Easel can attach trusted metadata before forwarding a request to application code.
These headers describe the request as observed by Easel rather than values supplied directly by the client.
Request ID
A unique identifier for the request.
Use this value to correlate:
- client responses
- function logs
- platform logs
- traces
- firewall events
- support investigations
The same request ID may also be returned in the response.
Do not generate or overwrite this header in application code.
Deployment metadata
On function invokes, Easel may expose deployment context through documented request headers.
For example:
Possible environment values:
Use deployment metadata for diagnostics and environment-aware behavior.
Prefer project environment variables for ordinary application configuration. Request headers must not replace stable configuration such as database URLs, API credentials, or feature flags.
Function region
Dynamic requests may include the region in which application code is running:
This can help diagnose latency relative to your databases and APIs.
Functions currently run in US East (iad). The header identifies that compute
region on the request your application receives.
Do not store application state locally based on region headers. Function instances remain ephemeral and independently scalable.
Forwarded headers
Easel may forward standardized proxy information using headers such as:
or:
X-Forwarded-Proto is the protocol the visitor used when connecting to Easel.
For deployed applications, the expected value is normally https.
X-Forwarded-Host is the hostname requested by the visitor before internal
routing or rewrites. Use it when application behavior depends on the public
hostname, such as canonical URLs, domain-specific branding, or authentication
callback URLs. Validate hostnames before using them to construct
security-sensitive URLs.
Clients or upstream proxies can send forwarded headers themselves. Treat them as proxy metadata, not as proof of identity, unless your integration documents a trusted proxy chain.
Frameworks may expose the same information through their own request APIs.
Trust boundaries
Headers received from the public internet are untrusted.
Easel overwrites documented platform headers where required for routing and diagnostics. Client-supplied values do not control routing or security decisions.
For example, sending:
does not control Easel’s internal routing or security behavior.
Only values attached by Easel after the request enters the platform must be treated as trusted platform metadata.
Reading request headers
Web standard Request API
Header names are case-insensitive.
Next.js App Router
Use the framework’s normal request-header API where available.
Response headers
Easel adds response headers that help identify the request path, cache result, security decision, and platform behavior.
Request ID
The identifier associated with the request.
Use this value when searching logs or reporting a specific failed request.
Cache result
Indicates how the CDN cache handled the request.
| Value | Meaning |
|---|---|
HIT | A fresh cached response was served |
STALE | A stale cached response was served within an explicit stale-while-revalidate window while refreshing in the background |
MISS | No usable fresh or SWR-eligible stale entry was found; origin or regeneration ran |
BYPASS | The request or response was not eligible for shared caching |
See Caching for eligibility and debugging.
Age
The number of seconds a response has spent in a shared cache.
Age may be present depending on the serving path. Treat X-Easel-Cache as the
authoritative cache-result header. Absence of Age is not an error.
When both are present:
the cached entry has been stored for approximately 42 seconds.
Server
Identifies Easel as the response-serving platform.
Applications must not depend on this header for behavior or security decisions.
Content encoding
Indicates that Easel or the application compressed the response.
Common values include:
Responses may also include:
See Compression.
Firewall diagnostics
When available, Easel may include supported firewall metadata such as:
These headers can help explain why a request was allowed, blocked, or challenged.
Firewall metadata may be omitted when it would reveal sensitive security information or when no project rule was involved.
Do not expose internal rule identifiers to end users unless they are useful for support or administrative diagnostics.
See Security.
Preview indexing policy
Preview deployments include:
This discourages search engines from indexing preview environments.
The header does not provide access control. Anyone with the preview URL may still be able to access the deployment unless authentication or another access policy is enabled.
HSTS
HTTPS responses include:
This instructs compatible browsers to use HTTPS for future requests to the hostname.
See HTTPS and TLS for behavior and configuration guidance.
Cache policy headers
Applications control browser and shared-cache behavior with response headers such as:
Easel may consume CDN-specific directives while preserving the browser-facing policy.
See:
Custom response headers
Applications can return their own response headers.
You can also define headers through supported framework configuration or project routing rules.
Custom headers must not use reserved Easel header names.
Reserved headers
Do not rely on setting or overriding documented platform headers.
Examples include:
Easel may replace, remove, or ignore these values.
Use your own application namespace for custom diagnostics:
Hop-by-hop headers
Hop-by-hop headers apply only to one network connection and are not forwarded unchanged across proxies.
Examples include:
Applications must not depend on receiving or controlling these headers through the CDN.
WebSocket upgrade behavior, where supported, is documented separately from ordinary HTTP request forwarding.
Header size and limits
Requests and responses are subject to platform limits for:
- total header size
- individual header size
- number of headers
- cookie size
- URL length
Requests exceeding supported limits may be rejected before application code runs.
Responses exceeding supported limits may fail or have unsupported headers removed.
Privacy and sensitive data
Headers may appear in:
- access logs
- function logs
- traces
- error reports
- support diagnostics
Do not place secrets or sensitive personal data in custom headers unless the application requires it and the value is handled appropriately.
Avoid logging:
Use request IDs to correlate events instead of copying authentication values into logs.
Inspecting response headers
Use curl:
Example response:
For redirects, include only the response headers:
To follow redirects:
Inspecting request metadata
Create a temporary diagnostic route that returns only non-sensitive headers:
Remove diagnostic routes after testing. Do not return cookies, authorization headers, or other secrets to the browser.
Troubleshooting
A request header is missing
Check whether:
- the header is supported for the current route type
- the request reached application compute
- the framework or adapter removes it
- a local development server is being used
- an upstream proxy changed the request
- the feature is available for the current project plan
Some platform headers are present only on deployed requests and not during local development. Deployment and region headers are typically present on function invokes.
X-Easel-Cache is always BYPASS
Check for:
Set-CookieAuthorizationRangeCache-Control: privateCache-Control: no-storeCache-Control: no-cache- no positive shared-cache TTL
- an unsupported method or status
See Caching.
The request ID does not appear in function logs
The request may have completed before invoking the function.
Possible reasons include:
- firewall block
- redirect
- cache hit
- static asset response
- middleware-generated response
Platform request logs may still contain the request ID even when no function executed.
A custom header disappears
The header may be:
- reserved by Easel
- hop-by-hop
- disallowed by the framework
- removed by an upstream proxy
- larger than a platform limit
- overwritten by routing or project configuration
Use a non-reserved application header name and inspect both preview and production responses.
Headers differ between preview and production
Preview environments may add indexing, access-control, deployment, or diagnostic headers that do not appear in production.
Application configuration and environment-specific routing rules can also differ.