Debugging why a page is not being cached
A single no-store from a middleware, or a Vary on a header that always differs, defeats an entire CDN configuration. The response headers show which layer added it.
Fetches a URL and shows its HTTP response headers.
—Fetches a URL and shows its HTTP response headers.
https://example.com
content-type: text/html strict-transport-security: max-age=... cache-control: ...
Headers are listed in a readable table.
Headers control caching, security and content negotiation.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/http-header-viewer" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'const res = await fetch("https://yas.sh/api/v1/tools/http-header-viewer", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"url": "https://example.com"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/http-header-viewer", json={"url":"https://example.com"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | http/https URL |
{ "url": "https://example.com", "status": 200, "headers": { "content-type": "text/html", ... } }Send a HEAD/GET to a URL and return sanitized response headers.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).The tool issues a request to the URL and reports the status line and full response header set without rendering the body. Headers are where the operational truth lives: caching directives, content type and encoding, redirect targets, cookie attributes, CORS policy, and the security headers that govern how a browser treats the document.
Header semantics interact in ways that are easy to get wrong. Cache-Control overrides Expires; a Vary header changes what a shared cache may reuse; Content-Type's charset parameter determines how bytes are decoded regardless of any meta tag; and Set-Cookie attributes (Secure, HttpOnly, SameSite, Domain, Path) decide whether a cookie is sent at all. Reading the raw headers is the only way to see what the server actually sent rather than what the framework claims to send.
A single no-store from a middleware, or a Vary on a header that always differs, defeats an entire CDN configuration. The response headers show which layer added it.
Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options and Referrer-Policy either arrive on the response or they do not. Configuration files can lie; headers cannot.
Status codes and Location headers reveal whether a redirect is permanent, whether HTTPS upgrade happens before or after the www redirect, and how many hops users pay for.
Access-Control-Allow-Origin and the preflight response headers show exactly which part of the policy the browser rejected.
What this tool deliberately does not do, and where it will disagree with other implementations.