Free tool · no sign-up

Check your site’s security headers and HTTPS.

Type your site’s address. We load your public home page once, like any visitor, and grade HTTPS, the certificate, the security headers, cookie flags and mixed content, each with the fix for Vercel, Netlify, Cloudflare and Lovable. No account, and the result isn’t stored.

Loads your public home page only Result not stored 10 checks per hour per network No address handy?

Example result · synthetic site, for illustration

Result · 10 Nov 2026

https://demo-app.patchlabs-demo.example

  • HTTP 200
  • TLSv1.3
  • 3 findings
  • 7 passed
0High
2Medium
1Low
0Info
7Passed

Medium 2

Low 1

Passed 7

What we saw

HTTPS and certificate

HTTP to HTTPS
yes, http:// redirects to https://
Redirects
https://demo-app.patchlabs-demo.example/
Protocol
TLSv1.3
Issuer
Let's Encrypt
Expires
5 Jan 2027 (56 days left)

Cookies set on a signed-out visit

CookieSecureHttpOnlySameSite
sb-demo-auth-tokenyesnoLax

Response headers

HeaderValue
strict-transport-security PL-029max-age=63072000; includeSubDomains
content-security-policy PL-030not sent
content-security-policy-report-onlynot sent
x-frame-options PL-031DENY
x-content-type-options PL-032not sent
referrer-policy PL-036strict-origin-when-cross-origin
permissions-policynot sent
server PL-035Vercel
x-powered-by PL-035not sent

A header check, not a security test. This reads one public page, the way any visitor’s browser does. It can’t see who can read your database, what your code does or whether your keys are exposed, and those cause the leaks that matter most in AI-built apps. The full check covers them, and never touches your database.

What it checks

Ten checks, from one ordinary page load.

Each finding links to a page that explains it, shows how to check it yourself and gives the fix for your host. The points are what each failed check costs in the grade.

IDWhat we flagSeverityPoints
PL-027The plain http:// address serves the page instead of redirecting to https://.medium15
PL-028The TLS certificate is invalid, expired, or expires within 21 days.high medium30 / 15
PL-029No Strict-Transport-Security header, or a max-age under 180 days.low5
PL-030No Content-Security-Policy (a report-only policy blocks nothing, so it doesn’t count).medium15
PL-031Any site can put the page in a frame: no frame-ancestors and no X-Frame-Options.low5
PL-032No X-Content-Type-Options: nosniff.low5
PL-033A cookie set without Secure, or a session cookie without HttpOnly.medium15
PL-034The page loads scripts or stylesheets over plain http://.medium15
PL-035Server or X-Powered-By headers that name software versions.info0
PL-036No Referrer-Policy header or meta tag.info0

How the grade works

Start at 100. Each failed check costs its points once, however many cookies it caught. A is 90 or more, B 75, C 60, D 40, anything lower F. An invalid or expired certificate is always F, because browsers show a full-page warning.

Sites on .app and .dev

Some top-level domains, including .app and .dev, are on every browser’s HSTS preload list, so browsers never load them over plain HTTP. Sites on them pass PL-027 and PL-029 without a redirect or header of their own.

What it does, exactly

The same requests any visitor’s browser makes.

This is a passive check, like Mozilla Observatory or securityheaders.com. It reads what your site already sends to everyone.

What we send

Three things, once

  • One plain http:// request to your home page, to see whether it redirects to HTTPS
  • One https:// load of your home page, following at most 5 redirects
  • The TLS handshake of that load, to read the certificate

What we never do

No probing, no payloads

  • Request any other path, guess URLs or follow links
  • Submit forms, call your API or sign in
  • Touch your database, or test for data leaks
  • Store the result: it comes back to your browser and nowhere else

For engineers

Run it from your terminal or CI.

The same check is a public endpoint. It returns the grade, every finding with its fix, the checks that passed and the raw facts: redirects, certificate, headers and cookie flags (names only, never values).

  • Any public https:// or http:// address; IP addresses and private names are refused
  • 10 requests per network per hour
  • 422 for an address it won’t check, 502 when the page can’t be loaded, both with a sentence saying why

REST API docs

terminal
curl -s https://api.patchlabs.dev/tools/headers-check \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://your-app.com"}'
response (shortened)
{
  "url": "https://your-app.com",
  "final_url": "https://your-app.com/",
  "grade": "C", "score": 65,
  "counts": {"critical": 0, "high": 0, "medium": 2, "low": 1, "info": 0},
  "findings": [
    {"id": "PL-030", "severity": "medium",
     "title": "No Content-Security-Policy",
     "evidence": "The page sends no Content-Security-Policy header or meta tag.",
     "fix": "Send a Content-Security-Policy that lists where scripts may load from (start with default-src 'self')."}
  ],
  "passed": [{"id": "PL-027", "title": "HTTPS is forced"}],
  "facts": {
    "status": 200, "https_redirect": true,
    "tls": {"version": "TLSv1.3", "issuer": "Let's Encrypt",
            "expires": "2027-01-05", "days_left": 56},
    "headers": {"strict-transport-security": "max-age=63072000", "content-security-policy": null},
    "cookies": [{"name": "sb-auth-token", "secure": true, "httponly": false, "samesite": "Lax"}]
  }
}

Questions

About the headers check

Something else? Email the founder.

I got an A. Is my app secure?

Your site sends the right headers, which is worth having. It says nothing about your data: the most common leak in AI-built apps is a database rule that lets strangers read other people’s rows, and no header stops that. The full check rebuilds your database from its migrations and tests who can read what.

Do you keep the address or the result?

The result isn’t stored: it goes back to your browser. To enforce the hourly limit we keep the host name and a hashed network address. Cookie values are never read into the result, only their names and flags.

Can I check a site that isn’t mine?

The tool makes the same requests any visitor makes to a public page, so yes, as with any header checker. Daily re-checks and alerts in the app only run on a domain your team proves it controls.

My host doesn’t let me set headers.

Each finding page covers that case. Two options work almost anywhere: put your custom domain behind Cloudflare and add the headers there, or set the policies that allow it (CSP and Referrer-Policy) with a meta tag in index.html. HSTS, framing and nosniff only work as real headers. See the security headers guide.

Why does a missing SameSite not count?

Browsers treat a cookie without SameSite as Lax, which already keeps it out of most requests other sites trigger. Setting it explicitly is still good practice, and the facts table shows it for every cookie.

Live posture

Get this grade every day, and an alert when it drops.

Add your app to PatchLabs, verify your domain with a file or a meta tag, and Live posture re-checks it daily, emails your team when the grade drops or a finding appears, and gives you a badge. PatchLabs never touches your database. Live posture only loads your public home page, like any visitor, and only on domains you verify.