HSTS, short for HTTP Strict Transport Security, is a response header that tells a browser to use HTTPS for a host and to keep doing that until a timer runs out. The header is Strict-Transport-Security. The important pieces are max-age, counted in seconds, the optional includeSubDomains flag, and the optional preload flag. After a browser has seen a valid header on an HTTPS response, it rewrites later HTTP attempts to HTTPS by itself and refuses to click through a certificate warning for that host.
The first visit is the gap. If someone types the bare name, or follows an old http link, the browser has not seen the header yet. An attacker on that network can still intercept that first request. The preload list is a list of hosts baked into the browser so that even the first visit is forced to HTTPS. Getting on that list is a one-way decision for a long time. This page shows whether the header you are serving has the shape the list requires. It does not submit the domain anywhere.
How to read the result
The check is the same request as the security header checker: one GET, ports 80 and 443 only, at most five redirects, and no request at all if the name resolves to a private or reserved address. The result puts the HSTS header first. max-age=0 means the site is asking browsers to forget HSTS. A missing max-age means the header is ignored. A max-age under one year, or a header without includeSubDomains, is real protection for this host and it is not preload-shaped.
Preload directives, from this response alone, are max-age of at least 31536000, includeSubDomains, and the word preload. The preload list also requires the registrable domain rather than only a subdomain, HTTPS with a trusted certificate, and an HTTP response that redirects to HTTPS and itself carries the header once you are on HTTPS. A single HTTPS response cannot prove the redirect or the rest of the zone. When the final URL is HTTP, browsers ignore the header entirely, and the result says that even if the tokens look right.
Common mistakes
- Turning on preload while a subdomain still has no certificate, or still serves a different site that cannot do HTTPS. includeSubDomains then breaks that name.
- Setting a max-age of a few minutes and expecting phones that saw the header last month to keep the policy. They keep it only as long as max-age says.
- Sending the header on www and not on the apex. Visitors who type the apex never store it, and preload will not take a www-only policy.
- Using max-age=0 to 'test' and forgetting that every browser which sees it drops the pin.
- Assuming HSTS fixes a mixed-content page. It forces the navigation to HTTPS. It does not rewrite an image URL inside the HTML.
A sensible order is to redirect every HTTP URL to HTTPS, serve a year-long header with includeSubDomains on the apex and on www, watch for broken subdomains, and only then add preload. Removing a preloaded host is a browser-release problem, not a DNS change. The other headers from the same response are summarized under the HSTS block, and the full reading is on the security header page.