Skip to content

Security Headers Checker

Fetch one page and take apart its HTTP security headers: HSTS lifetime and scope, every Content Security Policy directive in a table with unsafe sources highlighted, X-Content-Type-Options, framing protection, Referrer-Policy explained value by value, Permissions-Policy features, cross-origin isolation, cookie flags, caching and CORS. Missing headers come with copy-ready example values.

Server-assistedFreeNo sign-up

Server-assisted. What you enter here (a domain, URL or test payload) is sent to our server to run the check. We don't save it, but our web server logs record the request, including a domain or address you entered, for about 14 days. Details

How to use the security headers checker

  1. Enter a page URL and press Check headers. Redirects are followed and the final response is analysed.
  2. Start with the fix-first list, then open the Content Security Policy group to see each directive and its sources; red badges mark unsafe-inline, unsafe-eval and wildcards.
  3. Read the explanation under each finding to decide whether it applies to your site; not every header suits every page.
  4. Copy the suggested value for any missing header, adapt it (especially CSP) and re-check after deploying.

Features

  • Full CSP directive table for enforced and report-only policies, with fallback logic (default-src) applied the way browsers do
  • HSTS parsed into max-age, includeSubDomains and preload with thresholds for six months and one year
  • Referrer-Policy values explained individually, Permissions-Policy features listed, X-Frame-Options and frame-ancestors combined into one framing verdict
  • Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy and Cross-Origin-Resource-Policy
  • Set-Cookie flags per cookie (Secure, HttpOnly, SameSite, __Host-/__Secure- prefixes) with values discarded
  • Cache-Control on HTML, Access-Control-Allow-Origin with credentials, Server and X-Powered-By exposure
  • Copy-ready example values for whatever is missing, plus the raw header list and a plain-text report

What the headers do

Strict-Transport-Security tells a browser that has seen it to use HTTPS only, for the stated number of seconds. Content-Security-Policy restricts where scripts, styles, images, frames and connections may load from, which is the strongest browser-side defence against cross-site scripting; script-src is the directive that matters most, and nonces or hashes beat host allow-lists. X-Content-Type-Options: nosniff stops browsers from guessing content types. X-Frame-Options and frame-ancestors decide who may embed the page, which prevents clickjacking. Referrer-Policy limits what the Referer header reveals to other sites. Permissions-Policy switches off browser features the page does not need.

Cross-Origin-Opener-Policy isolates the window from cross-origin openers, Cross-Origin-Embedder-Policy and Cross-Origin-Resource-Policy control what may be embedded and by whom. On cookies, Secure keeps them off plain HTTP, HttpOnly hides them from scripts and SameSite limits cross-site requests that carry them. Cache-Control matters when personalised HTML could be stored by a shared cache, and Access-Control-Allow-Origin decides which sites may read the response with JavaScript.

Reading the CSP table

Each row is one directive with its source list. 'self', 'none', nonces, hashes and 'strict-dynamic' are shown in green; 'unsafe-inline', 'unsafe-eval', bare schemes like https: and the * wildcard are shown in red because each of them widens what an injected script can do. When a fetch directive such as img-src is absent, browsers fall back to default-src, and the analysis does the same. Browsers ignore 'unsafe-inline' when a nonce or hash is present in the same directive, so that combination is reported as informational rather than as a failure.

Limitations and responsible use

One anonymous GET request from a single server, without JavaScript, without cookies and without an Origin header. Headers that depend on login state, on the request's Origin (reflected CORS) or on the user agent cannot be seen, so a clean result is not proof that the site is well configured in every situation. Only test sites you own or are authorised to test.

  • Header values are kept up to 8 KB; anything longer is truncated with an ellipsis.
  • Only the final response after redirects is analysed. Intermediate hops can lack headers that matter (for example HSTS on the http:// hop).
  • Private addresses, non-standard ports and credentials in the URL are refused.

Frequently asked questions

Which header should I add first?

If the site is on HTTPS everywhere, HSTS is the easiest win. X-Content-Type-Options: nosniff and a framing rule are one-liners with no side effects. CSP has the most impact but needs testing in report-only mode first, because a wrong policy breaks the page.

Why is a missing CSP only a warning and not a failure?

CSP is a defence in depth against injection bugs the site may not have. Its absence is a missed opportunity rather than a visible fault, whereas an existing policy that still allows 'unsafe-inline' scripts without nonces creates a false sense of protection and is reported as a failure.

The report says CORS reflection cannot be tested. What does that mean?

Some servers echo whatever Origin header a request carries back in Access-Control-Allow-Origin, which effectively grants every site access. Detecting that requires sending requests with forged Origin headers, which this tool deliberately does not do; check your CORS middleware configuration directly.

Can I paste the example values straight into my server config?

The one-line headers (nosniff, DENY, Referrer-Policy, COOP) are safe as given. HSTS should only be enabled once every subdomain is served over HTTPS. The CSP example will block anything your pages load from other origins, so treat it as a template and test it in Content-Security-Policy-Report-Only first.

Other tools people use alongside Security Headers Checker.

You might also like

Something useful from another corner of VoltKit.