Back to knowledge center
What Is HSTS? HTTP Strict Transport Security Explained
security David Lindgren 7 min7/12/2026

What Is HSTS? HTTP Strict Transport Security Explained

HSTS tells browsers to load your site over HTTPS only - no downgrades, no click-through on certificate errors. Here's how it works, how to enable it on nginx, Apache, IIS and Cloudflare, and how to preload it safely.

Run the same check right now — free

Enter your domain and get a 9-point audit — DNS, SPF/DKIM/DMARC, SSL, security headers, dark-web exposure — in 60 seconds.

No signup · <60s · GDPR/EU processing

Your site probably redirects to HTTPS already, and the padlock shows up just fine. But every time a returning visitor types your address without https://, their browser still sends one unencrypted HTTP request before your redirect kicks in. On hostile networks - airport Wi-Fi, hotel hotspots, a compromised router - that single request is the opening an attacker needs. HTTP Strict Transport Security (HSTS) closes it for good: one response header that tells browsers to never speak plain HTTP to your domain again.

The gap is real: according to W3Techs (July 2026), 90.1% of all websites now default to HTTPS, but only 34.1% send an HSTS header. Nine sites in ten encrypt; barely one in three actually enforces it.

What is HSTS?

HSTS (HTTP Strict Transport Security) is a web security policy mechanism standardized in RFC 6797 back in 2012. It consists of a single HTTP response header:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

When a browser receives this header over a valid HTTPS connection, it remembers - for max-age seconds - that your host is HTTPS-only. From that moment:

  • Every http:// link, bookmark, or typed address for your domain is rewritten to https:// inside the browser (an internal 307 redirect), before a single packet leaves the device.
  • Certificate warnings on your site become non-bypassable: no "Proceed anyway" link. If the certificate is broken - or someone is intercepting the connection - the browser refuses, full stop.

All major browsers - Chrome, Edge, Firefox, Safari - have supported HSTS for roughly a decade, on desktop and mobile.

Server configuration code on a laptop screen

Why an HTTPS redirect alone isn't enough

A classic 301 redirect from HTTP to HTTPS happens server-side - the browser must first send the plain-HTTP request, and an attacker sitting between your visitor and your server sees it before your redirect ever answers. That is exactly how SSL stripping works, a downgrade attack demonstrated by Moxie Marlinspike back in 2009: the attacker silently keeps the victim on HTTP while talking HTTPS to the real server, reading everything in transit.

Protection301 redirect onlyHSTSHSTS + preload
Later visits upgraded before any network request❌✅✅
The very first visit protected❌❌✅
Certificate errors non-bypassable❌✅✅
Defeats SSL stripping (downgrade attacks)❌✅ after first visit✅ always

What each level of HTTPS enforcement actually protects.

Keep the redirect - you still need it for first-time visitors and for preload eligibility - but understand what it cannot do alone.

How HSTS works, step by step

  1. First visit. The browser loads https://example.com, the response carries the Strict-Transport-Security header, and the policy is cached.
  2. Every visit after that. Any attempt to reach http://example.com is upgraded internally to HTTPS. A packet capture on the network would show no plaintext request at all.
  3. The timer slides. Each new HTTPS response containing the header resets max-age, so regular visitors stay protected indefinitely.
  4. Hard failure on bad certificates. Expired, self-signed, or man-in-the-middle certificates produce an error page that cannot be clicked through.

The three directives

DirectiveRequired?What it doesRecommended value
max-ageYesHow long (in seconds) the browser enforces HTTPS-only31536000 (1 year); 63072000 (2 years) is also common
includeSubDomainsFor preloadExtends the policy to every subdomainOnly after confirming all subdomains serve HTTPS
preloadFor preloadOpts in to browsers' built-in preload listAfter running at a 1-year max-age without issues

How to enable HSTS on your server

Add the header only in the HTTPS configuration - browsers ignore HSTS sent over plain HTTP, as required by the spec.

nginx (inside the server block that listens on 443):

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Apache (with mod_headers enabled, in the HTTPS vhost):

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

IIS (web.config):

<httpProtocol>
  <customHeaders>
    <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
  </customHeaders>
</httpProtocol>

Cloudflare: SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Enable, then set max-age and subdomain options in the dashboard.

Then confirm the header is actually served: open your site, check the Network tab in your browser's DevTools, and look for strict-transport-security among the response headers - or simply run the free FortifyNet scan, which flags a missing or weak HSTS policy.

Roll it out gradually

A mistaken HSTS policy locks visitors out of any broken HTTP-only resource for the full remaining max-age - you cannot take it back remotely except by serving max-age=0 over valid HTTPS to each affected browser. Ramp up instead:

StageHeader valueHold for
1 - Testmax-age=300A day or two
2 - Shortmax-age=86400A week
3 - Mediummax-age=2592000A month
4 - Fullmax-age=31536000; includeSubDomains3+ months
5 - Preloadmax-age=31536000; includeSubDomains; preloadPermanent

HSTS preload: closing the first-visit gap

Plain HSTS is trust on first use: the very first request from a brand-new visitor is still unprotected until the first header arrives. The preload list fixes that - your domain ships inside the browser itself as HTTPS-only, so even visit number one never touches plain HTTP.

Developer verifying a website's HTTPS configuration on a laptop

Submission is free at hstspreload.org (the Chromium-maintained list, also consumed by Edge, Firefox, and Safari). The requirements:

  • A valid TLS certificate.
  • HTTP redirects to HTTPS on the same host (port 80 → 443).
  • The HSTS header served on the HTTPS response of the base domain with max-age of at least 31536000 (1 year), plus both includeSubDomains and preload.
  • Every subdomain - including www - reachable over HTTPS.

Treat preload as a one-way door. Removal from the list takes months to propagate through browser releases. Do not preload until every subdomain - including internal ones like intranet. or mail. - has working HTTPS.

Adoption in 2026: HTTPS everywhere, enforcement lagging

Bar chart: 90.1% of websites default to HTTPS but only 34.1% send an HSTS header (W3Techs, July 2026)

HTTPS is near-universal, yet only about a third of sites enforce it with HSTS (source: W3Techs, July 2026).

Browsers are pushing hard in the same direction. In Chrome 147 (April 2026), Google enabled "Always Use Secure Connections" for the 1 billion+ users with Enhanced Safe Browsing, and with Chrome 154 (October 2026) it becomes the default for everyone: Chrome will attempt HTTPS first and warn before loading public HTTP sites.

Does that make HSTS obsolete? No. Chrome's warning is bypassable by the user; HSTS is your server's own non-bypassable guarantee. It works in every browser regardless of settings, covers all your subdomains, and blocks certificate click-through. The two complement each other.

Common HSTS mistakes

  • Enabling includeSubDomains blind - one forgotten HTTP-only subdomain (intranet, staging, a printer portal) becomes unreachable for the whole max-age.
  • Sending the header over HTTP - harmless but useless; browsers ignore it.
  • A max-age of a few minutes in production - near-zero protection, and it fails preload requirements.
  • Forgetting HSTS after a server or CDN migration - the policy silently expires and nobody notices.

Frequently asked questions

Does HSTS replace my HTTP→HTTPS redirect? No. Keep the redirect: first-time visitors need it, and the preload list requires it.

Can I undo HSTS? Serve Strict-Transport-Security: max-age=0 over HTTPS and browsers drop the policy on their next visit. Preload removal is much slower - months - which is why you ramp up carefully.

Does HSTS affect SEO? Only positively: it guarantees users and crawlers land on one canonical HTTPS version of your site. There is no downside for rankings.

How do I know if my site sends HSTS? Check the response headers in your browser's DevTools (Network tab) for strict-transport-security - or run a free FortifyNet scan, which checks HSTS along with the rest of your security headers.

Is HSTS all I need? It is one of several headers a hardened site sends. Pair it with Content-Security-Policy, X-Content-Type-Options and friends - see our complete security headers guide.

Check your HSTS in 60 seconds

The free FortifyNet scan tests your SSL/TLS setup, HSTS and all other security headers, DNS and email authentication, and dark-web exposure - in about a minute, no signup required. If HSTS is missing or misconfigured, you will see exactly what to fix.

Frequently Asked Questions

#HSTS#HTTPS#security headers#TLS#web security

Check your domain now

Run a free security audit and see if your domain has the issues described in this article.

Cookie Settings

We use cookies to improve your experience. You can choose which cookies to accept.