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

Final status 200 OK https://github.com/
Redirects 1 143 ms across the chain
Protocol HTTP/2 No HTTP/3 advertised · TLS 1.3
Security headers Grade B 9 checks, explained below

Redirect chain each hop is a fresh connection

  1. 0 301 http://github.com/ 42 ms
    dns 18.0 msconnect 11.7 msttfb 11.4 msdownload 0.0 ms
    dns
    18.0 ms
    connect
    11.7 ms
    ttfb
    11.4 ms
    download
    0.0 ms
    Server
    20.26.156.215:80 · HTTP/1.1
    Location
    https://github.com/
    Body
    0 bytes · uncompressed
  2. 1 200 https://github.com/ 101 ms
    dns 12.6 msconnect 12.1 mstls 29.6 msttfb 13.4 msdownload 33.0 ms
    dns
    12.6 ms
    connect
    12.1 ms
    tls
    29.6 ms
    ttfb
    13.4 ms
    download
    33.0 ms
    Server
    20.26.156.215:443 · HTTP/2.0
    TLS
    TLS 1.3 · TLS_AES_128_GCM_SHA256
    Type
    text/html; charset=utf-8
    Body
    92598 bytes · gzip

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

NameFlagsExpiresHopIssues
_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-Rangesbytes
Cache-Controlmax-age=0, private, must-revalidate
Content-Encodinggzip
Content-Languageen-US
Content-Security-Policydefault-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-Typetext/html; charset=utf-8
DateThu, 29 Oct 2026 16:07:31 GMT
EtagW/"a661cce75c96ffaaf41172db3077f614"
Referrer-Policyorigin-when-cross-origin, strict-origin-when-cross-origin
Servergithub.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-Cookielogged_in=no; expires=Fri, 29 Oct 2027 16:07:44 GMT; domain=.github.com; path=/; HttpOnly; secure; SameSite=Lax
Strict-Transport-Securitymax-age=31536000; includeSubdomains; preload
VaryX-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-Optionsnosniff
X-Frame-Optionsdeny
X-Github-Edge-Regionuksouth
X-Github-Request-Id8D20:33AE2C:117A7DB:196FC09:6AE36F50
X-Xss-Protection0

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

Examples

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.