Skip to content
AdminKit

How do you read an HTTP security headers check result?

An HTTP security headers result lists each recommended response header — Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options or frame-ancestors, Referrer-Policy and Permissions-Policy — as present or missing, with the exact value sent for each one that's present, because a header's presence alone doesn't say whether the policy it carries is actually strict enough to do its job.

By AdminKit team, Netbase JSC · Updated October 29, 2026

What the result is actually reporting

AdminKit’s HTTP security headers check fetches a URL and reads back its response headers, the same way a browser’s first request to a page does. The result is a checklist, not a single score: each recommended header is marked present or missing, and every present header shows the exact value the server sent. These headers all work the same general way — they’re instructions a server gives a browser about how to treat the page it’s about to render — and a browser only enforces an instruction it actually received. A header that’s missing isn’t silently “defaulted to safe”; the related protection simply doesn’t apply at all.

Content-Security-Policy (CSP): the broadest header

MDN’s CSP documentation describes CSP as a mechanism to “help detect and mitigate certain types of attacks, including Cross-Site Scripting (XSS) and data injection attacks,” by letting a page restrict which origins scripts, styles, images and other resources may load from. A result showing CSP present is only half the picture — read the value’s directives (default-src, script-src, style-src, and so on). A policy that lists specific, trusted origins is doing real work; one set to default-src * or unsafe-inline for scripts provides little more protection than having no policy at all, because it permits exactly the kind of injected content CSP exists to block.

Strict-Transport-Security (HSTS): closing the plain-HTTP window

A present Strict-Transport-Security header tells a browser to refuse plain HTTP for the domain going forward, for as long as its max-age specifies — this check reports whether the header is sent and its max-age value, which matters because a short or absent max-age leaves a wider downgrade window open on repeat visits. See HSTS and HSTS preload explained for the full mechanism, including the “first visit” gap this header alone doesn’t close and what preload adds on top of it.

X-Content-Type-Options and the clickjacking headers

X-Content-Type-Options: nosniff is a single-value header with one job: it tells the browser not to guess (“sniff”) a response’s content type from its contents, overriding a declared Content-Type — MIME-sniffing has historically been a vector for getting a browser to execute content as a script that the server never intended to serve as one. There’s no partial credit here; the result shows it as present with the value nosniff, or missing.

X-Frame-Options and CSP’s frame-ancestors directive both control who can embed the page in an iframe, which is the mechanism behind clickjacking (tricking a user into clicking something they can’t see because it’s layered under a disguised, transparent frame). frame-ancestors is the newer, more flexible control and takes precedence in browsers that support it; a result showing one or the other present is sufficient, and both together is the typical belt-and-suspenders setup for the widest browser compatibility.

Referrer-Policy and Permissions-Policy: the quieter leaks

Referrer-Policy controls how much of the current page’s URL gets sent as the Referer header on outbound requests — including to third-party scripts and resources on the same page, not just links a visitor clicks. MDN recommends strict-origin-when-cross-origin as a sensible default, since a missing policy falls back to the browser’s own default, which can leak more of the URL (including query-string contents) to cross-origin requests than most sites intend. Permissions-Policy is the newer control for browser features themselves — camera, microphone, geolocation and similar — restricting which origins embedded in the page, such as third-party iframes, may request access to them at all.

Reading the result as a whole, not a pass/fail count

The check does not produce one combined score, and reading it that way misses the point: a site missing one header entirely can still be in better shape than one with every header “present” but set to an ineffective value, if the single missing header is a minor one and the “present” policy is permissive. Read each present header’s actual value against the OWASP Secure Headers Project’s reference table, prioritize Content-Security-Policy and Strict-Transport-Security first since they cover the broadest attack surface, and treat nosniff, a clickjacking header and a Referrer-Policy as the next tier.

Next step: check your own site

Run AdminKit’s HTTP security headers check against your own URL to see this breakdown for a live response. If the certificate behind that same site is also worth confirming, how to read a TLS/SSL certificate check result covers the companion check for transport encryption itself, which these headers assume is already in place.

This guide is general information, not a security audit of your specific network — see our disclaimer for what AdminKit's guidance does and does not commit to.

Frequently asked questions

Is a 'Present' result the same as 'correctly configured'?

No. 'Present' only means the header was sent in the response at all. A Content-Security-Policy set to default-src *, which allows content from any origin, shows as present but provides close to no protection. Always read the value shown next to a present header, not just the present/missing label — the OWASP Secure Headers Project's reference values are the baseline to compare against.

Which of these headers matters most if I can only fix one?

Content-Security-Policy generally has the biggest practical effect, because a well-scoped policy is one of the strongest available mitigations against cross-site scripting (XSS) — MDN's CSP documentation describes it as letting a site restrict which sources scripts, styles and other resources may load from. Strict-Transport-Security is a close second on any site that still accepts plain HTTP at all, since it closes a protocol-downgrade window that CSP doesn't touch.

What's the difference between X-Frame-Options and CSP's frame-ancestors directive?

Both control whether another site can embed yours in an iframe, which is the mechanism behind clickjacking attacks. X-Frame-Options is the older, simpler header (DENY or SAMEORIGIN); frame-ancestors is a Content-Security-Policy directive that supersedes it with finer-grained control, including allowing a specific list of origins. MDN notes browsers that support frame-ancestors ignore X-Frame-Options when both are present, so a site can send frame-ancestors alone on modern clients, keeping X-Frame-Options only as a fallback for older ones.

Why does the result flag a missing Referrer-Policy as an issue, when my site has no sensitive URLs?

The referrer leak isn't about your site's own URLs being sensitive — it's that, without a Referrer-Policy, a browser's default behavior still sends the full referring URL (which can include session tokens, search terms or internal path structure in the query string) to every external link a visitor clicks, including third-party scripts and images. MDN recommends strict-origin-when-cross-origin as a safe default: it sends the full URL only to same-origin requests and just the origin elsewhere.

Does this check mean my site has no other vulnerabilities?

No — it is a configuration checklist for one category of browser-enforced defenses, not a full security audit. A site can send every recommended header correctly and still have an unrelated vulnerability in its application code, authentication, or server configuration that headers alone can't prevent.

Want AdminKit to watch this for you?

Free checks tell you the state today. Protective DNS and monitoring tell you when it changes.

Huy Nguyen (David), Founder and CEO of Netbase JSC

Talk to an expert

Huy Nguyen (David), Founder & CEO, Netbase JSC

Ask whether this fix applies to your setup, or get a second pair of eyes on your DNS and mail records.

Chat with David on WhatsApp