Skip to content
Free tools Security Headers Checker

Security Headers Checker — grade your HTTP headers A+ to F

Scan any URL for Content-Security-Policy, HSTS, X-Frame-Options, Referrer-Policy and Permissions-Policy. Get an A+ to F grade, a directive-by-directive CSP review, and copy-paste config for nginx, Apache, Cloudflare, Netlify and Vercel.

100% free No signup CSP directive review Copy-paste server config Graded A+ to F

How it works

  1. Enter any URL

    A home page, a login page, a checkout. We request it like a browser, follow the redirects, and read the raw response headers.

  2. Every header graded

    Six headers carry the score; cookies, version leaks, third-party scripts without integrity checks and deprecated headers are reviewed too.

  3. Copy the fix

    Exact lines for nginx, Apache, Cloudflare, Netlify or Vercel — including a report-only Content-Security-Policy built from the scripts your page already loads.

What HTTP security headers do

Every time a browser loads a page, the server sends a set of response headers along with the HTML. A handful of them are security instructions: they tell the browser which scripts it may run, whether it must always use HTTPS, whether other sites may embed the page, and what it may reveal to third parties. They're free to send, invisible to visitors, and they shut whole classes of attacks — cross-site scripting, clickjacking, SSL stripping — even when something else goes wrong. This checker fetches any URL, follows its redirects, reads the raw headers and grades them A+ to F.

The six headers that carry the grade

Content-Security-Policy (30 points)

The strongest single defence against injected scripts. A CSP lists where scripts, styles, images and connections may come from, and the browser refuses everything else — so a script slipped in through a vulnerable plugin or a compromised third party doesn't run. The checker reviews the policy directive by directive and flags the classic weaknesses:

  • 'unsafe-inline' in script-src without a nonce or hash, which lets any injected inline script run;
  • 'unsafe-eval', which turns injected text into code;
  • wildcards and scheme-only sources such as *, https: or data:, which allow scripts from anywhere;
  • allowlisted hosts known to serve JSONP or old AngularJS builds, which attackers use to run code from a "trusted" origin;
  • no object-src 'none' and no base-uri, two easy-to-forget gaps that default-src doesn't fully cover.

A policy sent as Content-Security-Policy-Report-Only is detected too. It earns partial credit: it's the right way to start, but it reports problems without blocking anything.

Strict-Transport-Security (20 points)

HSTS tells the browser to use HTTPS for your site from now on, so a visitor's first request can't go out over plain http:// and be intercepted before your redirect arrives. Six months of max-age is the usual minimum; one year with includeSubDomains is the standard recommendation, and the requirement for the browsers' preload list.

X-Frame-Options or frame-ancestors (15 points)

Stops other websites from loading your page inside an invisible frame and tricking visitors into clicking buttons on it (clickjacking). X-Frame-Options: SAMEORIGIN works everywhere; the CSP directive frame-ancestors is the modern replacement and also counts. The old ALLOW-FROM value is ignored by current browsers, so it scores nothing.

Referrer-Policy (15 points)

Decides how much of the current URL is sent to other sites when visitors click a link or the page loads a resource. URLs often carry search terms, account IDs or reset tokens, so strict-origin-when-cross-origin or stricter is recommended; unsafe-url is flagged because it sends everything, everywhere.

X-Content-Type-Options (10 points)

One value, nosniff, stops browsers from second-guessing a file's type — so an uploaded "image" can't be run as a script.

Permissions-Policy (10 points)

Switches off browser features you don't use — camera, microphone, geolocation, payment — so neither injected code nor a third-party widget can ask for them. A policy that grants a feature to every origin with =* loses some credit.

Beyond the six

The report also covers what a real security review would mention: cookies set without Secure and HttpOnly (which costs up to five points), server software and version numbers leaking through Server, X-Powered-By or a generator tag, third-party scripts loaded without Subresource Integrity, mixed http:// content, and headers that are now obsolete — X-XSS-Protection (set it to 0 or drop it), Expect-CT and Public-Key-Pins. Cross-origin isolation headers (COOP, COEP, CORP) are shown for information; they're useful in specific cases rather than a baseline requirement.

How the grade works

Points add up to 100. A+ needs 95 or more with no warnings, A 85, B 70, C 55, D 40 and E 25; anything lower is an F, and so is any page served over plain HTTP, because none of the other headers can protect traffic that's readable in transit. The header checks mirror the ones Monity's security monitoring runs on every check, so what this page flags is what a monitor would alert on if it changed.

Fixing it: copy-ready config

The report ends with the exact lines to add for nginx, Apache, Cloudflare, Netlify or Vercel — only the headers that are missing or wrong, so working settings aren't overwritten. For a site with no Content-Security-Policy, the suggestion is a report-only policy built from the third-party scripts and stylesheets the page already loads. Deploy it, read the violation reports for a week or two (in the browser console, or with a report-to endpoint), allow what's legitimate, give inline scripts a nonce, and then switch the header name to Content-Security-Policy.

Headers are often set in several places — the CDN, the web server, the application, plugins — so scan the pages that matter most rather than only the home page: login, account and checkout pages frequently differ.

Related checks

Security headers sit on top of a valid HTTPS setup; check the certificate, its chain and its expiry with the SSL Certificate Checker. The SEO & AI Visibility Audit reviews the same page for search and AI visibility, and the Redirect Checker confirms every http:// variant lands on HTTPS in one hop.

Headers change. Monity notices.

A deploy, a CDN migration or a plugin update can drop a header without any visible change to the page. Monity re-checks your pages on a schedule and alerts you in email, Slack or Teams when a security header changes or disappears, and its script watch flags new script origins and modified third-party scripts — the kind of change detection PCI DSS 4.0 requires for payment pages (requirements 6.4.3 and 11.6.1). The free plan includes three monitors, forever.

FAQ

Common questions

What are HTTP security headers?

Instructions your server sends with every page that tell the browser how to protect visitors: only load scripts from these places (Content-Security-Policy), always use HTTPS (Strict-Transport-Security), don't let other sites frame this page (X-Frame-Options), don't guess file types (X-Content-Type-Options), don't leak full URLs (Referrer-Policy), and keep the camera and microphone off (Permissions-Policy). They cost nothing to send and close whole classes of attacks.

How is the grade calculated?

Six headers carry 100 points: Content-Security-Policy 30, Strict-Transport-Security 20, framing protection 15, Referrer-Policy 15, X-Content-Type-Options 10 and Permissions-Policy 10. Weak values earn partial points — a CSP that allows 'unsafe-inline' scripts loses 10, a report-only CSP earns a third — and cookies without Secure and HttpOnly cost up to 5. A+ needs 95 or more with no warnings, A 85, B 70, C 55, D 40, E 25. A page served over plain HTTP is always F.

Will adding a Content-Security-Policy break my site?

An enforcing one can, which is why the suggested policy starts as Content-Security-Policy-Report-Only: the browser reports what it would have blocked and blocks nothing. The starter policy is built from the third-party scripts and stylesheets this page already loads, so most reports are things you genuinely need to allow — or inline scripts that need a nonce. When the reports go quiet, rename the header and it starts protecting visitors.

Do I still need X-Frame-Options and X-XSS-Protection?

X-Frame-Options, yes — unless your CSP has frame-ancestors, which replaces it in modern browsers; sending both is harmless. X-XSS-Protection, no: browsers removed the XSS filter it controlled, and its old "block" mode could itself be abused. Send X-XSS-Protection: 0 or nothing, and rely on a Content-Security-Policy.

Why do different pages on my site get different grades?

Headers are often set in more than one place: the CDN, the web server, the application, and plugins. A marketing site on one platform and an app or checkout on another rarely send the same set, and error pages often skip headers that only the application adds. Scan the pages that matter most — login, account, checkout — not just the home page.

Can I get alerted when my security headers change?

Yes. Monity re-checks your pages on a schedule and alerts you in email, Slack or Teams when a security header changes or disappears, and its script watch flags new script origins and changed third-party scripts — the change detection PCI DSS 4.0 requires for payment pages (requirements 6.4.3 and 11.6.1). The free plan includes 3 monitors forever.

Powered by Monity

Headers disappear in deploys, CDN changes and plugin updates.
Monity notices the same day.

Monity re-checks your pages on a schedule and alerts you when a security header changes or a new third-party script shows up — the change detection PCI DSS 4.0 asks for.

  • Free 7-day trial
  • No credit card
  • 3 monitors free, forever
Kamil, Alex and Martyna Median reply under 6 hours

Have a question?

Pricing, security, or scoping - pick a route and you will land in a real person's inbox.