Website
Security Header Checker
HSTS, CSP, frame control, MIME sniffing, referrer and cookie flags — each judged with the value cited.
How to use it
- Enter the address you want to checkType or paste it into the field marked "Address to check", including the https:// at the front. Use a page that matters — a login, a checkout, an admin screen.
- Press Check and wait a few secondsThe request runs from our server rather than from your browser, so your cache, your extensions and your login session cannot affect the answer. That is the point of it: you are seeing what an anonymous visitor sees.
- Look at which headers are missingEach header is reported with what it defends against, so the list is a set of decisions rather than a score to maximise. Not every site needs every header.
- Start with the content security policyIt is the one that does the most and the one most often absent or so permissive it does nothing. A policy allowing unsafe-inline is reported, because that is the part most XSS relies on.
- Check HSTS if you serve HTTPSWithout it, the first request a visitor makes can still go over plain HTTP. The tool reports its max-age and whether subdomains are included, since a short max-age offers little.
- Treat this as a checklist, not a security auditHeaders are one layer. A page with a perfect set of them can still have an injection flaw behind it, and no non-invasive tool can tell you otherwise.
- Share or keep the result within 24 hoursThe result has its own link you can send to whoever needs to act on it. It is deleted 24 hours after the check ran, so save anything you need to keep — and re-run the check after a change rather than trusting an old link.
About this tool
Browsers enforce a set of protections only when a site asks for them, by sending the right response headers. This tool reads those headers for one URL and judges each against current guidance, quoting the value it judged so you can check the reasoning rather than take it on trust.
Absence is treated as a finding rather than skipped. A page with no Content-Security-Policy is not unassessed — it is a page where any injected script runs, and the result says so along with what the missing header would have prevented.
Understanding the result
Fails come first, then warnings, then what is already right, because the useful order is the order you would fix them in.
Deprecated headers are judged in reverse: X-XSS-Protection, Expect-CT and Public-Key-Pins are flagged when present. All three went from recommended to harmful or useless, and guidance that still awards points for them is teaching an answer that expired years ago.
Cookies are assessed on their attributes — Secure, HttpOnly, SameSite — never on their values, which are frequently live sessions and are neither read nor stored.
Example
Input
https://example.com/Output
1 protection missing
[Missing] Content-Security-Policy — any injected script runs
[Needs attention] Referrer-Policy: no-referrer-when-downgrade sends full URLs
[Good] Strict-Transport-Security, X-Frame-Options, X-Content-Type-OptionsLimitations
- Headers are read from one URL. Sites commonly send different headers for the home page, for authenticated pages and for API responses, so check the pages that matter rather than assuming the home page speaks for all of them.
- A Content-Security-Policy is assessed structurally: whether it exists and whether directives give back what it is for. Whether it actually covers everything your pages load needs the browser console, not a header check.
- Headers are one layer. They do not compensate for unescaped output, missing authorisation checks or vulnerable dependencies.
- Permissions-Policy and Cross-Origin-Opener-Policy are reported as optional rather than counted for or against — they are worthwhile but not universal expectations.
Questions
Which of these should I fix first?
In order of effect: a Content-Security-Policy, because it is the one that contains an injected script; then frame control, which stops clickjacking; then HSTS, which closes the plaintext first request. X-Content-Type-Options is a single header value and takes a minute.
Why is my CSP only a warning rather than a pass?
Most often because it allows 'unsafe-inline' for scripts with no nonce or hash, which re-permits exactly the injected inline script CSP exists to block. The result names the directive so you can see which one weakened it.
Is it bad that I still send X-XSS-Protection?
It does nothing in any current browser, and the filter it controlled could itself be manipulated to introduce vulnerabilities, which is why browsers removed it. It is not dangerous to send today, but its presence usually means the configuration has not been revisited in some years.
Why does HSTS show as not applicable on my site?
Because the page was served over plain HTTP, and browsers ignore HSTS delivered that way — it only counts on an HTTPS response. The fix is HTTPS, not the header.
Last updated 2026-08-16.
Related tools
- HTTP Status and Header Checker
Check status code, response headers, compression and timing for any public URL.
- Indexability Checker
Find out whether search engines can index a page, and exactly what is stopping them.
- SSL Certificate Checker
Issuer, validity dates, hostname coverage, the chain as served, and expiry with the days counted.