HTTP header & redirect checker.
Check response headers, follow the redirect chain hop by hop, see where the time goes on each request, and get a security headers review in plain English. Fetched from this server, so you see what a client really goes through.
GET http://github.com/ · 2 hops · 143 ms total JSON · text
Redirect chain each hop is a fresh connection
-
0 301 http://github.com/ 42 ms
- dns
- 18.0 ms
- connect
- 11.7 ms
- ttfb
- 11.4 ms
- download
- 0.0 ms
-
1 200 https://github.com/ 101 ms
- dns
- 12.6 ms
- connect
- 12.1 ms
- tls
- 29.6 ms
- ttfb
- 13.4 ms
- download
- 33.0 ms
Security headers on the final response
-
pass
Strict-Transport-Security max-age=31536000; includeSubdomains; preload
Browsers that have seen this will refuse to load the site over plain HTTP.
-
pass
Content-Security-Policy default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; conn...
Policy is enforced and script sources are restricted.
-
pass
Framing frame-ancestors 'none'
CSP frame-ancestors controls which sites may embed this page. It supersedes X-Frame-Options.
-
pass
X-Content-Type-Options nosniff
Browsers will trust the declared Content-Type rather than guessing, which blocks a class of script-injection tricks.
-
pass
Referrer-Policy origin-when-cross-origin, strict-origin-when-cross-origin
Limits how much of the URL other sites learn when a user follows a link.
-
warn
Permissions-Policy missing
Optional but recommended. Turning off features the page does not need (camera=(), microphone=(), geolocation=()) limits what a compromised script or third-party frame can do.
Why this matters: HTTP security headers: what each one does and a sensible default set
-
info
Cross-Origin-Opener-Policy missing
Not essential for most sites. same-origin is worth adding if the page handles logins or sensitive data.
Why this matters: HTTP security headers: what each one does and a sensible default set
-
pass
Server disclosure Server: github.com
A product name without a version is fine.
-
warn
Cookies 3 set, 1 attribute warnings
Cookies are Secure but some lack HttpOnly or SameSite. HttpOnly keeps them away from scripts; SameSite limits cross-site request forgery.
Why this matters: HTTP security headers: what each one does and a sensible default set
Cookies 3 set across the chain
| Name | Flags | Expires | Hop | Issues |
|---|---|---|---|---|
| _gh_sess | Secure HttpOnly SameSite=Lax | session | 2 | |
| _octo | Secure SameSite=Lax | 2027-10-29T16:07:44Z | 2 | no HttpOnly flag |
| logged_in | Secure HttpOnly SameSite=Lax | 2027-10-29T16:07:44Z | 2 |
Final response headers 20 headers
| Accept-Ranges | bytes |
| Cache-Control | max-age=0, private, must-revalidate |
| Content-Encoding | gzip |
| Content-Language | en-US |
| Content-Security-Policy | default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net productionresultssa1.blob.core.windows.net productionresultssa2.blob.core.windows.net productionresultssa3.blob.core.windows.net productionresultssa4.blob.core.windows.net productionresultssa5.blob.core.windows.net productionresultssa6.blob.core.windows.net productionresultssa7.blob.core.windows.net productionresultssa8.blob.core.windows.net productionresultssa9.blob.core.windows.net productionresultssa10.blob.core.windows.net productionresultssa11.blob.core.windows.net productionresultssa12.blob.core.windows.net productionresultssa13.blob.core.windows.net productionresultssa14.blob.core.windows.net productionresultssa15.blob.core.windows.net productionresultssa16.blob.core.windows.net productionresultssa17.blob.core.windows.net productionresultssa18.blob.core.windows.net productionresultssa19.blob.core.windows.net productionresultssa30.blob.core.windows.net productionresultssa31.blob.core.windows.net productionresultssa32.blob.core.windows.net github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com wss://production-copilot-host.webpubsub.azure.com wss://production-copilot-host-centralus.webpubsub.azure.com wss://production-copilot-host-centralus-02.webpubsub.azure.com wss://production-copilot-host-westus.webpubsub.azure.com api.github.com/cmc_internal/api/ edge.fullstory.com rs.fullstory.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com www.youtube-nocookie.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com user-images.githubusercontent.com private-user-images.githubusercontent.com opengraph.githubassets.com repository-images.githubusercontent.com marketplace-screenshots.githubusercontent.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com explore-feed.github.com *.googleusercontent.com objects-origin.githubusercontent.com *.githubusercontent.com images.ctfassets.net/8aevphvgewt8/; manifest-src 'self'; media-src github.com user-images.githubusercontent.com secured-user-images.githubusercontent.com private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com assets.ctfassets.net/8aevphvgewt8/ videos.ctfassets.net/8aevphvgewt8/; script-src github.githubassets.com 'sha256-6AKuI+cDd1MoUL1u4eqrA9PXmnPAkOB4h7421hPUUm0='; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/ |
| Content-Type | text/html; charset=utf-8 |
| Date | Thu, 29 Oct 2026 16:07:31 GMT |
| Etag | W/"a661cce75c96ffaaf41172db3077f614" |
| Referrer-Policy | origin-when-cross-origin, strict-origin-when-cross-origin |
| Server | github.com |
| Set-Cookie | _gh_sess=sBmkpYBEV2AD6yB74g8Yng0iEjOot7n5l7vACloWO3Dx3wzsw1uNQL4jvRtqwQ%2B%2FPKjQaMP5ATPYSqEffeNQQNZqRpZmct0qqupl8MZvCREikTEZDoV8pfpIATPqRIqJkJeN8%2BbEbXo6kP39Pu9lWEwKeaHprgWrXiSt85LIyxFFQQl04x4W3zqlpC9AJLbML2x3KZCHDEoWGuj3wu1qY16mwaLOiUmc5lzxtdAau1HJRci73hF0u4sNQ4Hs%2BMUx0a%2BQFWticYS5qTTRffgUBQ%3D%3D--sXI4%2Beq59ROUNCfy--AM9eddqlsBGlzeborVWThA%3D%3D; path=/; HttpOnly; secure; SameSite=Lax |
| Set-Cookie | _octo=GH1.1.1726832207.1793290064; expires=Fri, 29 Oct 2027 16:07:44 GMT; domain=.github.com; path=/; secure; SameSite=Lax |
| Set-Cookie | logged_in=no; expires=Fri, 29 Oct 2027 16:07:44 GMT; domain=.github.com; path=/; HttpOnly; secure; SameSite=Lax |
| Strict-Transport-Security | max-age=31536000; includeSubdomains; preload |
| Vary | X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With, X-GitHub-Client-Version, Accept-Language, Sec-Fetch-Site,Accept-Encoding, Accept, X-Requested-With |
| X-Content-Type-Options | nosniff |
| X-Frame-Options | deny |
| X-Github-Edge-Region | uksouth |
| X-Github-Request-Id | 8D20:33AE2C:117A7DB:196FC09:6AE36F50 |
| X-Xss-Protection | 0 |
About this tool
This server fetches the URL you give it with redirects switched off, so each hop in a chain is its own request on its own connection. For every hop it records how long DNS resolution, the TCP connect, the TLS handshake, the wait for the first byte and the body download took, then follows the Location header and does it again, up to ten times. The body is read (up to 2 MB) so the download phase is real, but it is discarded and nothing is stored. The request is sent with a browser-like Accept and Accept-Encoding so the server behaves as it would for a real visitor.
HTTP header checker
The final response headers table shows Content-Type, Cache-Control, Server, Set-Cookie, Vary and everything else the origin or CDN added, exactly as sent, with nothing normalised. Compare it with what your application thinks it is sending: the gap is usually a proxy or CDN rewriting Cache-Control, stripping a custom header, or adding its own Server line. For what the browser sends in the other direction, use the request header checker.
Redirect checker
The redirect chain lists every hop with its status code (301, 302, 307 or 308), its Location header and how long it took. Three hops to reach a page is three round trips your visitors pay for before the first byte of content, and each one is a place for a mixed-content or cookie bug to hide. The chain you want for a canonical site is one hop: http:// anything straight to the final https:// URL. Which code to use for each case is in 301 vs 302 vs 307 vs 308.
Security headers checker
The graded scorecard looks at the final response for Strict-Transport-Security, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy and Cross-Origin-Opener-Policy, plus version leakage in Server and X-Powered-By and the Secure, HttpOnly and SameSite flags on every cookie set along the chain. Each line says what was found and why it matters rather than just red or green. The two most often missing on otherwise well-run sites are CSP and HSTS; a CSP in report-only mode is a safe first step. The header-by-header explanation and a starting configuration are in HTTP security headers explained, and the domain health checker folds this grade into a whole-domain report.
Response time and TTFB test
The timing bar on each hop splits the request into DNS, connect, TLS, first byte and download. A long first-byte segment is the server thinking (slow application code, a cold cache, a database call); a long TLS segment is a distant edge or a server without session resumption; a long download on a small page is an uncompressed body. Because the fetch comes from this server, the numbers are one vantage point, not your users' experience, but the proportions between the phases are what tell you where to look.
Common findings
- HTTP to HTTPS is a 302: should be a 301 or 308 so clients and search engines treat it as permanent. Also check HSTS is set on the HTTPS response; the HSTS preload checklist covers rolling it out safely.
- Redirect loop or long chain:
http → https → www → trailing slashis four requests. Collapse them into one. - Not compressed: the Body row says "uncompressed" for a text response. Enable gzip or brotli at the CDN or origin.
- HTTP/1.1 only: no ALPN
h2. Usually an old load balancer or a proxy in front of a modern origin. - Missing security headers: no CSP and no HSTS is common on otherwise well-run sites. Each check explains what to add.
- Cookies without Secure or HttpOnly: session cookies sent over HTTP or readable by scripts. The cookies table lists the flags on every one set along the chain.
- Server or X-Powered-By leaks a version:
nginx/1.18.0orPHP/7.4tells attackers exactly what to look up.
Examples
- http://example.com: a plain HTTP fetch
- http://github.com: an HTTP to HTTPS redirect and a strong header set
- a 302 from the status tester: see how a redirect without a Location is reported
From the command line
curl "kirkdiamond.com/tools/http?url=example.com" or add &format=json for the full structured report, and &method=HEAD to skip the body. Only public hosts can be fetched.
Every parameter, the JSON field names, rate limits and ready-made CI checks are in the API and curl reference.