Security Headers Grading Explained: What A-F Means and How to Get an A
Monitorion
Engineering Team
Every time a browser loads your website, your server sends HTTP headers that tell the browser how to handle the page. Security headers are special instructions that protect your users from attacks like cross-site scripting (XSS), clickjacking, and data injection. Missing security headers leave your users — and your reputation — exposed.
The A-F Grading System
Security header grading works like a report card. Each critical header is checked for presence and correct configuration:
- A+ — All critical headers present and correctly configured, including advanced ones like Permissions-Policy
- A — All critical headers present: HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy
- B — Most critical headers present, minor gaps
- C — Some critical headers missing
- D — Most critical headers missing
- F — No security headers at all
Critical Headers You Need
| Header | Purpose | Example |
|---|---|---|
| Strict-Transport-Security (HSTS) | Forces HTTPS connections | max-age=31536000; includeSubDomains |
| Content-Security-Policy (CSP) | Prevents XSS and injection attacks | default-src 'self'; script-src 'self' |
| X-Frame-Options | Prevents clickjacking | DENY or SAMEORIGIN |
| X-Content-Type-Options | Prevents MIME sniffing | nosniff |
| Referrer-Policy | Controls referrer information leakage | strict-origin-when-cross-origin |
| Permissions-Policy | Restricts browser features (camera, mic, etc.) | camera=(), microphone=() |
How to Monitor Security Headers
Manually checking headers with browser DevTools is fine for a one-time audit. But headers can change when you update your web server, deploy new code, or modify your CDN configuration. Automated monitoring catches regressions before attackers do.
With Monitorion's Security Headers monitor, you get:
- Automatic A-F grading on every check
- Alerts when your grade drops (e.g., from A to C after a deploy)
- Detailed breakdown of which headers are present, missing, or misconfigured
- Historical tracking to see how your security posture changes over time
Quick Fixes for Common Issues
Missing HSTS? Add to your Nginx config: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Missing X-Frame-Options? Add: add_header X-Frame-Options "SAMEORIGIN" always;
Missing X-Content-Type-Options? Add: add_header X-Content-Type-Options "nosniff" always;
For Apache, use Header always set instead. For CDNs like Cloudflare, configure these in the dashboard under Security settings.
Start monitoring your security headers — free plan includes Security Headers monitoring.
Enjoyed this post?
Get monitoring tips and product updates delivered to your inbox.