HTTP headers checker
Follow a URL hop by hop and see every status code, redirect and header along the way.
Results for https://example.com/
200 OK
Answers without redirecting
https://example.com/ answered with 200 OK in 62 ms.
One request, one answer
- 1200 OKhttps://example.com/62 ms
1 hop: 200.
0 of 6 checks pass
No explicit freshness: caches may apply a heuristic based on Last-Modified.
Response headers12
| Header | Value |
|---|---|
date | Sat, 14 Nov 2026 17:43:30 GMT |
content-type | text/html; charset=utf-8 |
transfer-encoding | chunked |
connection | close |
server | cloudflare |
last-modified | Fri, 13 Nov 2026 18:54:38 GMT |
allow | GET, HEAD |
age | 13799 |
cf-cache-status | HIT |
content-encoding | br |
cf-ray | a5a7d19ee9ac3cc1-CDG |
alt-svc | h3=":443"; ma=86400 |
Security6
These six headers tell browsers how to treat the page. A missing one is a chance to tighten things up, not a fault in itself. Score: 0 out of 100.
| Header | Rating | Value | What it means |
|---|---|---|---|
Strict-Transport-Security | Missing | – | No HSTS header: a first visit over plain HTTP can be intercepted before the redirect to HTTPS. |
Content-Security-Policy | Missing | – | No Content-Security-Policy: the browser will run any script an attacker manages to inject. |
X-Frame-Options | Missing | – | Nothing stops other sites from framing this page (clickjacking). Send X-Frame-Options or a CSP frame-ancestors directive. |
X-Content-Type-Options | Missing | – | Without "nosniff" browsers may guess a different content type than the one sent. |
Referrer-Policy | Missing | – | No Referrer-Policy: browsers apply their own default (strict-origin-when-cross-origin in current ones). State it explicitly. |
Permissions-Policy | Missing | – | No Permissions-Policy: powerful browser features stay available to any embedded content. |
Caching
No explicit freshness: caches may apply a heuristic based on Last-Modified.
- Age of this copy
- 13,799 s
- Last modified
- Fri, 13 Nov 2026 18:54:38 GMT
- CDN cache
- cf-cache-status: HIT
Server
- Software
- cloudflare
- CDN
- Cloudflare
- Content type
text/html; charset=utf-8- Compression
br
Structured result (JSON) · 3.4 KB
{
"url": "https://example.com/",
"method": "GET",
"finalUrl": "https://example.com/",
"status": 200,
"ok": true,
"hops": [
{
"url": "https://example.com/",
"status": 200,
"headers": {
"date": "Sat, 14 Nov 2026 17:43:30 GMT",
"content-type": "text/html; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "close",
"server": "cloudflare",
"last-modified": "Fri, 13 Nov 2026 18:54:38 GMT",
"allow": "GET, HEAD",
"age": "13799",
"cf-cache-status": "HIT",
"content-encoding": "br",
"cf-ray": "a5a7d19ee9ac3cc1-CDG",
"alt-svc": "h3=\":443\"; ma=86400"
},
"ms": 62,
"statusText": "OK",
"ip": "2606:4700:10::ac42:93f3",
"httpVersion": "1.1"
}
],
"totalMs": 63,
"redirects": {
"count": 0,
"loop": false,
"tooMany": false,
"notFollowed": false,
"httpsUpgrade": false,
"downgrade": false,
"crossDomain": false,
"chain": []
},
"security": {
"score": 0,
"grade": "F",
"checks": [
{
"id": "hsts",
"header": "Strict-Transport-Security",
"weight": 25,
"present": false,
"rating": "missing",
"message": "No HSTS header: a first visit over plain HTTP can be intercepted before the redirect to HTTPS."
},
{
"id": "csp",
"header": "Content-Security-Policy",
"weight": 30,
"present": false,
"rating": "missing",
"message": "No Content-Security-Policy: the browser will run any script an attacker manages to inject."
},
{
"id": "frame-options",
"header": "X-Frame-Options",
"weight": 15,
"present": false,
"rating": "missing",
"message": "Nothing stops other sites from framing this page (clickjacking). Send X-Frame-Options or a CSP frame-ancestors directive."
},
{
"id": "content-type-options",
"header": "X-Content-Type-Options",
"weight": 15,
"present": false,
"rating": "missing",
"message": "Without \"nosniff\" browsers may guess a different content type than the one sent."
},
{
"id": "referrer-policy",
"header": "Referrer-Policy",
"weight": 10,
"present": false,
"rating": "missing",
"message": "No Referrer-Policy: browsers apply their own default (strict-origin-when-cross-origin in current ones). State it explicitly."
},
{
"id": "permissions-policy",
"header": "Permissions-Policy",
"weight": 5,
"present": false,
"rating": "missing",
"message": "No Permissions-Policy: powerful browser features stay available to any embedded content."
}
]
},
"caching": {
"noStore": false,
"noCache": false,
"private": false,
"public": false,
"immutable": false,
"mustRevalidate": false,
"cacheability": "unspecified",
"summary": "No explicit freshness: caches may apply a heuristic based on Last-Modified.",
"lastModified": "Fri, 13 Nov 2026 18:54:38 GMT",
"age": 13799,
"cdnStatus": "cf-cache-status: HIT"
},
"cookies": [],
"server": {
"versionDisclosed": false,
"software": "cloudflare",
"cdn": "Cloudflare"
},
"content": {
"type": "text/html; charset=utf-8",
"encoding": "br"
},
"issues": [],
"notes": [],
"statusText": "OK"
}What this tool shows
Before a page appears, the server sends a status code and a set of headers: what kind of response it is, how long to cache it, which security rules apply, which cookies to set and where to go next. Browsers hide this by default. The HTTP headers checker makes the request from LookupOwl's server, follows any redirects, and shows each hop's status, the IP that answered, how long it took and every header.
Use it to debug caching and CDN (content delivery network) behaviour, confirm that security headers are really being sent, find out why a URL redirects somewhere unexpected, or see what a crawler or API client gets without installing anything.
How to use it
- Enter a URLType
https://example.com/pageor justexample.com. A bare host is tried over HTTPS first, then over plain HTTP if HTTPS cannot be reached at all. Only public addresses on ports 80, 443, 8080 and 8443 are fetched. - Pick a methodIn More options, choose GET or HEAD. GET shows what a browser would receive. HEAD asks the server for the headers only, which is lighter for large files, though a few servers answer it differently. You can also switch off Follow redirects there to see just the first response. Either way, LookupOwl reads only the headers and never downloads the page.
- Read each hopIf the URL redirects, every step appears with its own status and headers, ending at the final response. LookupOwl follows up to 10 redirects. For a closer look at chains and loops, use the redirect checker.
# The same check from a terminal
curl -sIL https://example.com
curl -s -o /dev/null -D - https://example.comThe headers worth knowing
| Header | What it does | What to look for |
|---|---|---|
Cache-Control | Sets how long browsers and CDNs may store the response. | no-store disables caching, public, max-age=31536000, immutable suits fingerprinted assets, and private keeps it out of shared caches. |
Content-Type | Media type and character set. | text/html; charset=utf-8 for pages. A wrong type breaks rendering. |
Content-Encoding | The compression used. | br or gzip on text responses saves bandwidth. |
Strict-Transport-Security | Tells browsers to use HTTPS only (HSTS). | A max-age of at least 15552000 (180 days) rates good, and a year is the usual advice. Add includeSubDomains if every subdomain supports HTTPS. |
Content-Security-Policy | Restricts what the page may load or run. | That it exists, and that its script sources are not a wildcard or 'unsafe-inline'. |
X-Frame-Options | Stops other sites from framing the page (clickjacking). | DENY or SAMEORIGIN, or a CSP frame-ancestors rule instead. |
X-Content-Type-Options | Stops browsers guessing the content type. | nosniff. |
Referrer-Policy, Permissions-Policy | Limit what is leaked to other sites and which browser features are allowed. | Deliberate values, not defaults. |
Set-Cookie | Creates cookies. | Secure, HttpOnly and SameSite attributes. |
Location | Where a redirect goes. | The target URL, and whether it is the one you meant. |
Server, X-Powered-By | The software that answered. | Version numbers you may prefer not to expose. |
Vary, ETag, Age | Cache keys, validators and the age of a CDN's copy. | Why two visitors get different cached copies. |
Alt-Svc | Advertises other ways to reach the site, such as HTTP/3. | h3 in the value means the site offers HTTP/3. |
LookupOwl also grades the final response on six security headers, weighted by importance: Content-Security-Policy 30 points, HSTS 25, frame protection 15, X-Content-Type-Options 15, Referrer-Policy 10 and Permissions-Policy 5. Each is rated good, ok, weak or missing, the total becomes a score out of 100, and the score becomes a grade from A+ (97 and up) down to F (under 40). Treat the grade as a checklist rather than a verdict, because a header can be absent for a good reason. If the last response is a redirect, for example because you switched off Follow redirects, there is no grade: its headers belong to the page it points to.
The result also summarises caching (max-age, no-store, validators), lists each cookie's name and flags, and names the server software or CDN when the headers give it away. The Cookies tab never shows cookie values, but the raw Set-Cookie lines do, so skim a result before you paste it into a public thread.
- Status classes. 2xx means success, 3xx a redirect, 4xx a problem with the request (404 missing, 403 forbidden, 429 too many requests) and 5xx a server failure (500, 502, 503, 504).
- Protocol. Each hop says it was fetched over HTTP/1.1, because that is the only version LookupOwl speaks, so it is not a sign of what the site supports. When the final response offers HTTP/2 or HTTP/3 in its
Alt-Svcheader, the answer at the top says so. The questions below say more. - Timing. Each hop's time runs from the start of the request to the arrival of the response headers, so it includes the DNS lookup, the connection and the TLS handshake. It is one measurement from one place: a hint, not a benchmark.
Problems you can diagnose
- Stale content after a deploy. Look at
Cache-Control,AgeandETag. A CDN may still hold the old copy. - HSTS missing. Without it, a first visit over HTTP can be intercepted before the redirect to HTTPS.
- Cookies without flags. Session cookies that lack
SecureorHttpOnlyare easier to steal or leak. - A different result from my browser. The request comes from LookupOwl's server, not your device, and sites may serve different content to different clients or countries.
- 403 or 429 from the site. Some sites block automated requests. That is the site's choice, and it is useful to know.
- An error instead of headers. The checker verifies certificates, so an
https://address whose certificate fails shows an error, not headers. A bare host is retried over plain HTTP, and the result says what failed. Use the SSL checker to see what is wrong. - Cannot connect. The address may be blocked (private or loopback), on a port other than 80, 443, 8080 or 8443, or the server may be down. Check its DNS records.
How the fetch works
LookupOwl looks up the hostname once, checks that every address it returns is public, then connects to that exact IP so DNS cannot be swapped underneath it. It sends one GET or HEAD request per hop, with a user agent that names LookupOwl and points to the About page, and follows redirects itself, re-checking each new host. It reads the headers and hangs up, so no page is downloaded. Requests to private, loopback or reserved addresses are refused. Fresh checks of any one server or domain are limited to 30 a minute across all callers, so the tool cannot be used to flood a site. Results are cached for two minutes, and Check again fetches a fresh one.
Standards
- RFC 9110: HTTP semantics, methods, status codes and header fields. RFC 9111: caching.
- RFC 9112: HTTP/1.1, the version LookupOwl speaks. RFC 9113 and RFC 9114: HTTP/2 and HTTP/3. RFC 7838:
Alt-Svc. - RFC 6797: HTTP Strict Transport Security. RFC 6265: cookies.
- IANA HTTP Field Name Registry: the list of registered header names.
Questions people ask
How do I check the HTTP headers of a website?
Enter its URL above. You get the status code and every response header, including those of each redirect on the way, plus a security grade and a caching summary for the final response. You also see which IP answered and how long each hop took.
What is the difference between GET and HEAD?
GET asks the server for the full response, while HEAD asks for the headers only. The headers are normally identical, but some servers differ, especially for dynamic pages. LookupOwl reads only the headers either way, so GET is the better default: it shows what a browser would get.
Why is my security grade low when my site works fine?
The grade only counts which protective headers you send, not whether the site works. Missing headers cost points because browsers cannot use protections you never switched on, and a Content-Security-Policy and HSTS weigh the most. Add what suits your site and ignore items that do not apply, such as framing rules for a page meant to be embedded.
Why are my security headers missing from the result?
They may be set on the application but stripped by a proxy, set only on some paths, or set only for certain content types. Check the exact URL, including the final one after redirects, because the grade applies to the last response.
Can I check a page behind a login?
No. Every request is anonymous: LookupOwl sends none of your cookies or credentials and no custom headers, only a fixed user agent, Accept: */* and Accept-Encoding. For pages behind a login, use curl or your browser's developer tools, where you can send your own cookies and see exactly what comes back.
How can I tell if a site uses HTTP/2 or HTTP/3?
Not from this page, because LookupOwl always speaks HTTP/1.1. For HTTP/2, the SSL checker shows the protocol the server picks (h2) on port 443. For HTTP/3, the answer at the top shows an Offers HTTP/3 badge when the Alt-Svc header says so, or you can watch the protocol column in your browser's network panel.
Is it available to AI assistants?
Yes, through the http_headers tool on the free MCP server and REST API. No key is needed, and fresh checks of any one site are limited to 30 a minute across all callers. The assistant gets the hops, the security grade and the caching summary as structured data.
Use it from AI, the API or the command line
Every LookupOwl tool is also a free API and an MCP tool, with no key and no account. This one is http_headers. Please be kind to the rate limits.
curl "https://lookupowl.com/api/v1/tools/http-headers?q=https%3A%2F%2Fexample.com%2F"claude mcp add --transport http lookupowl https://lookupowl.com/mcp