HSTS: HTTP Strict Transport Security untuk SEO
Apa HSTS sebenarnya melakukan, Strict-Transport-Security header syntax (max-age, includeSubDomains, preload), browser-hanya internal redirect crawler tidak pernah see, mengapa ini tidak replace Anda 301s, dan bagaimana preload dapat lock Anda di — dari Patrick Stox.
Bahasa
1 sinyal bukti di halaman ini
- Alat aktif terkaitHTTP Header Checker
HSTS (HTTP Strict Transport Security) adalah sebuah Strict-Transport-Security respons header — honored hanya ketika ini arrives di atas sebuah secure connection — itu tells sebuah browser untuk selalu gunakan HTTPS untuk Anda domain going forward, closing insecure kesenjangan itu sebuah baru pengunjung's pertama permintaan masih membuat di atas HTTP sebelum Anda 301 fires. ini adalah sebuah browser-layer, per-client policy pada top dari Anda server-side redirects, tidak sebuah replacement: RFC 6797 memiliki browser rewrite URI untuk HTTPS internally sebelum apa pun permintaan goes out (sering ditampilkan sebagai sebuah internal 307-style redirect, though RFC tidak mandate sebuah spesifik kode status), so Tidak server ever sees HTTP form dan crawler masih perlu Anda nyata 301 untuk memahami move dan carry tautan equity. header memiliki three directives — max-age (diperlukan), includeSubDomains, dan preload. Preload bakes Anda domain ke browser itself melalui hstspreload.org (requiring max-age dari setidaknya sebuah tahun, includeSubDomains, dan preload flag) dan adalah close untuk irreversible — removal adalah sebuah terpisah submission itu takes months untuk reach pengguna. HSTS adalah juga dengan sengaja unforgiving: sebuah browser itu knows Anda sebagai sebuah HSTS host akan hard-fail dengan Tidak click-melalui jika Anda certificate ever breaks. So enable ini hanya setelah HTTPS adalah genuinely solid di seluruh setiap subdomain, dan treat preload sebagai sebuah satu-cara door.
TL;DR — HSTS adalah sebuah kecil instruction Anda server mengirim browser itu says “selalu gunakan HTTPS untuk my site — never plain HTTP.” (terjemahan) “selalu gunakan HTTPS untuk my situs — tidak pernah plain HTTP.” ini plugs sebuah tiny security celah itu sebuah wajar HTTP→HTTPS redirect leaves open, dan ini tidak hurt SEO. tetapi ini adalah strict pada purpose: setelah ini adalah pada, sebuah rusak certificate breaks Anda situs dengan Tidak cara untuk pengunjung untuk click past warning. Turn ini pada hanya ketika Anda HTTPS setup adalah genuinely solid.
Apa HSTS adalah
Anda sudah know Anda harus menjadi pada HTTPS — encrypted,
padlock versi dari Anda situs. wajar cara untuk force ini adalah sebuah redirect: ketika
seseorang jenis http://yoursite.com, Anda server mengirim them sebuah 301 redirect untuk
https://yoursite.com. itu berfungsi, tetapi ada sebuah sliver dari sebuah kesenjangan. itu very pertama
permintaan — satu sebelum redirect fires — masih goes out di atas insecure HTTP.
sebuah attacker sitting pada yang sama Wi-Fi dapat pounce di itu window.
HSTS — HTTP Strict Transport Security — closes itu kesenjangan. ini adalah sebuah pendek instruction
(sebuah “header” (terjemahan) “header”) Anda server menambahkan untuk -nya respons — tetapi hanya ones disajikan di atas sebuah
genuinely secure connection; yang sama header dikirim di atas plain HTTP adalah ignored, since
sebuah attacker dapat jika tidak inject atau strip ini — itu tells itu satu browser: untuk
berikutnya namun-banyak months, tidak pernah bahkan try HTTP untuk ini situs — go straight untuk
HTTPS. ini adalah sebuah policy setiap browser learns dan stores untuk itself, tidak sesuatu itu
perubahan Anda server. Setelah sebuah browser memiliki seen ini, ini upgrades http:// tautan untuk
https:// semua pada -nya own, sebelum apa pun leaves device. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header
melakukan HSTS help atau hurt SEO?
Neither, secara langsung. HSTS adalah sebuah security dan trust fitur, tidak sebuah peringkat lever.
ini tidak akan move Anda up hasil — tetapi selesai right ini tidak akan hurt Anda either. satu
hal untuk memahami adalah itu HSTS adalah tidak sebuah substitute untuk Anda redirects. Anda
masih perlu Anda nyata server-side 301 redirects dari HTTP untuk HTTPS, karena itu’s
apa Google dan Bing sebenarnya see dan gunakan. HSTS berfungsi di dalam browser untuk nyata
human pengunjung; crawler jangan rely pada ini. pertahankan keduanya.
satu big warning
HSTS adalah dengan sengaja unforgiving. Setelah sebuah browser memiliki “learned” (terjemahan) “learned” Anda situs adalah HTTPS-hanya, ini akan refuse untuk muat situs di semua jika Anda certificate ever expires atau misconfigures — dengan Tidak “proceed anyway” (terjemahan) “proceed anyway” button. itu’s seluruh poin (ini berhenti attackers dari tricking orang onto sebuah fake HTTP versi), tetapi ini berarti sebuah lapsed certificate goes dari “annoying warning” (terjemahan) “annoying warning” untuk “site is down for anyone who’s visited before.” (terjemahan) “situs adalah down untuk anyone siapa’s visited sebelum.”
ada juga sebuah supercharged versi called preload itu bakes Anda domain ke browser itself. ini adalah great, tetapi getting off preload list kemudian adalah slow dan painful — think months. So preload adalah sebuah satu-cara door: hanya walk melalui ini ketika Anda’re sure. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission
ingin header syntax, browser-hanya internal redirect crawler tidak pernah see, preload requirements, dan nyata lockout scenarios? Switch untuk Advanced tab.
TL;DR — HSTS adalah
Strict-Transport-Securityrespons header, honored hanya ketika sebuah browser menerima ini di atas sebuah secure connection, dan stored per-client sebagai future policy untuk itu host. ini closes “pertama request problem” (terjemahan) “pertama permintaan masalah” sebuah 301 alone leaves open: awal HTTP permintaan dari sebuah baru pengunjung adalah insecure until redirect fires, dan itu’s window sebuah SSL-stripping attacker ingin. Three directives:max-age(diperlukan, seconds),includeSubDomains,preload. Ketika sebuah browser enforces HSTS ini rewrites URI untuk HTTPS internally, sebelum apa pun permintaan reaches sebuah server — RFC 6797 tidak mandate sebuah spesifik kode status untuk itu rewrite, though alat sering surface ini sebagai sebuah 307 — so Anda server-side 301s adalah masih mandatory untuk mesin pencari dan tautan equity; HSTS adalah pada top dari them, tidak alih-alih. Preload bakes Anda domain ke browser melalui hstspreload.org (memerlukanmax-age≥ 31536000,includeSubDomains, danpreload) dan adalah close untuk irreversible — removal adalah sebuah terpisah submission itu takes months untuk reach pengguna. dan HSTS adalah designed untuk hard-fail pada apa pun cert error, so enable ini hanya ketika HTTPS adalah robust di seluruh setiap subdomain.
HTTPS hub introduces HSTS sebagai sebuah browser-layer protection itu sits pada top dari Anda 301s. ini halaman adalah deep dive: tepat header syntax, internal redirect itu trips SEOs up, preload list’s near-irreversibility, dan dunia nyata cara HSTS locks orang out.
masalah HSTS sebenarnya solves: pertama permintaan
Picture sebuah properly migrated situs. setiap http:// URL 301-redirects untuk -nya https://
twin, certificate adalah valid, canonicals poin untuk HTTPS. Looks airtight. ini tidak,
quite.
Ketika sebuah brand-baru pengunjung jenis yoursite.com (Tidak scheme) atau clicks sebuah old
http://yoursite.com tautan, browser’s pertama permintaan goes out di atas plain HTTP.
Anda server jawaban dengan 301, dan setiap permintaan setelah itu adalah secure. tetapi itu
satu awal round-trip happened di jelas — dan itu’s persis window sebuah
SSL-stripping attacker pada yang sama network ingin. mereka intercept HTTP permintaan,
pertahankan victim pada HTTP sementara mereka proxy HTTPS untuk Anda server, dan baca atau rewrite
semuanya.
HSTS eliminates itu window untuk anyone siapa memiliki visited sebelum. web.dev adalah direct
tentang mechanism:
“use Strict Transport Security to tell clients they should always connect to your
server using HTTPS, even when following an http:// reference. This defeats attacks
like SSL Stripping, and avoids the round-trip cost of the 301 redirect.” (terjemahan) “gunakan Strict Transport Security untuk tell clients mereka seharusnya selalu connect untuk Anda
server menggunakan HTTPS, bahkan ketika berikut sebuah http:// reference. ini defeats attacks
like SSL Stripping, dan menghindari round-trip cost dari 301 redirect.”
(web.dev).
itu terakhir clause penting untuk performa too: sebuah returning browser skips HTTP→HTTPS
round-trip entirely. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header
Dua boundary conditions worth menjadi precise tentang. pertama, HSTS adalah stored, per-client policy — ini lives di itu satu browser’s own state untuk itu host, learned dari sebuah header delivered di atas sebuah secure connection; yang sama header dikirim pada sebuah respons HTTP adalah ignored outright (sebuah attacker siapa dapat inject atau strip headers pada plain HTTP dapat jika tidak neutralize ini), dan sebuah client itu memiliki tidak pernah diterima ini — sebuah fresh install, sebuah berbeda browser, sebuah crawler — memiliki Tidak policy untuk enforce. kedua, rewrite adalah scheme-dan-port aware: sebuah implicit port 80 permintaan becomes sebuah implicit port 443 permintaan, tetapi jika original URI named sebuah jelas non-default port, browser mempertahankan itu sama port angka dan sekadar contacts ini di atas HTTPS alih-alih.
header syntax
HSTS adalah satu respons header dengan up untuk three directives. Per MDN, forms adalah:
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preloadmax-age=<seconds>— diperlukan. “The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (terjemahan) “ time, di seconds, itu browser seharusnya remember itu sebuah host adalah hanya untuk menjadi accessed menggunakan HTTPS” (MDN).31536000adalah satu tahun;63072000adalah dua. clock resets pada setiap respons itu carries header, so sebuah active situs continually renews -nya policy. ini adalah relative, per-client state: sekadar menghapus header tidak immediately jelas ini — sebuah browser itu sudah learned policy mempertahankan enforcing ini until -nya storedmax-ageberjalan out. untuk turn HSTS off untuk clients itu sudah learned ini, Anda memiliki untuk actively sajikanmax-age=0di atas sebuah secure respons; browser lalu forgets policy pada -nya berikutnya secure visit. (max-age=0clears sebuah learned policy hanya — ini melakukan tidak hapus sebuah domain dari terpisah preload list.)includeSubDomains— opsional. “If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (terjemahan) “jika ini directive adalah specified, HSTS policy applies untuk semua subdomains dari host’s domain sebagai well” (MDN). Powerful dan dangerous di equal mengukur — see lockout scenarios di bawah.preload— opsional. sebuah flag itu sinyal Anda intent untuk menjadi pada browser preload list. ini melakukan tidak ada apa pun pada -nya own; ini adalah sebuah prerequisite untuk submitting untuk hstspreload.org. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission
perilaku, again dari MDN:
“Before loading an http URL, the browser checks the domain name against its HSTS
hosts list. If the domain name is a case insensitive match for an HSTS host or is a
subdomain of one that specified includeSubDomains, then the browser replaces the
URL scheme with https.” (terjemahan) “sebelum memuat sebuah http URL, browser memeriksa domain name terhadap -nya HSTS
hosts list. jika domain name adalah sebuah case insensitive match untuk sebuah HSTS host atau adalah sebuah
subdomain dari satu itu specified includeSubDomains, lalu browser replaces
URL scheme dengan https.”
internal upgrade crawler tidak pernah see (ini adalah SEO crux)
Di sini’s single sebagian besar misunderstood hal tentang HSTS, dan alasan ini dapat’t replace Anda redirects.
Ketika sebuah browser upgrades sebuah http:// permintaan di bawah HSTS, ini rewrites URI untuk
HTTPS internally, sebelum apa pun network permintaan adalah dibuat — RFC 6797 memerlukan
scheme substitution itself tetapi melakukan tidak mandate sebuah particular kode status untuk ini
(RFC 6797 §8.3), so sebuah
diberikan browser atau crawling alat dapat mewakili itu internal langkah namun ini likes —
banyak display ini sebagai sebuah internal 307, tetapi itu’s client/alat-spesifik, tidak sebuah protocol
jaminan. Apa penting untuk SEO adalah simpler dan holds regardless dari label: Tidak
server adalah contacted untuk HTTP versi, so Tidak crawler ever sees ini. Googlebot dan
Bingbot jangan carry sebuah learned HSTS policy sekitar cara sebuah returning human’s Chrome
melakukan — mereka hit Anda server fresh, dan apa mereka perlu untuk see ada sebuah nyata,
server-side 301. Evidence for this claim RFC 6797 requires the user agent to rewrite a known-HSTS-host HTTP URI to HTTPS internally, but does not mandate any specific redirect status code for that internal rewrite; how a given browser or crawling tool represents that step (e.g., as an internal 307) is a client/tool implementation detail, not a protocol requirement. Scope: RFC 6797 Section 8.3 ("URI Loading and Port Mapping") specifies the UA MUST replace the URI scheme with https; it does not prescribe an HTTP status code for that internal substitution, since no HTTP exchange occurs for it. Section 7.2's suggestion of status code 301 addresses ordinary server-side redirect behavior, not this internal client-side rewrite. Confidence: high · Verified: RFC 6797 §8.3 — URI Loading and Port Mapping
So aturan adalah blunt: HSTS melakukan tidak replace Anda server-side 301s. 301 adalah apa mesin pencari gunakan untuk memahami protocol move dan untuk consolidate sinyal (pengalihan permanen tidak mengurangi PageRank — “301 and other permanent redirects don’t cause a loss in PageRank” (terjemahan) “Pengalihan 301 dan pengalihan permanen lainnya tidak mengurangi PageRank”, per Google). browser-hanya internal upgrade adalah sebuah pengguna-experience dan security layer pada top. Anda perlu keduanya, melakukan berbeda jobs:
- 301 (server-side): untuk crawler, pengindeksan, dan tautan equity.
- Internal 307-style upgrade (browser-side, dari HSTS): untuk returning humans dan SSL-stripping protection — tepat status representation varies oleh client/alat.
apa pun guide itu tells Anda HSTS “handles the redirect so you can drop your 301” (terjemahan) “menangani redirect so Anda dapat drop Anda 301” adalah wrong di sebuah cara itu akan diam-diam cost Anda.
HSTS preload: near-permanent versi
max-age melindungi returning pengunjung, tetapi ini memiliki sebuah bootstrap masalah: sebuah
pertama-time pengunjung siapa memiliki tidak pernah diterima Anda header adalah masih exposed pada itu
awal permintaan. Preload solves ini oleh hardcoding Anda domain ke browser’s
sumber itself, so browser knows Anda’re HTTPS-hanya sebelum ini memiliki ever connected.
Anda opt di hstspreload.org. requirements adalah tepat:
- “Serve a valid certificate.” (terjemahan) “sajikan valid certificate.”
- “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (terjemahan) “Redirect dari HTTP untuk HTTPS pada yang sama host, jika Anda adalah listening pada port 80.”
- “Serve all subdomains over HTTPS” (terjemahan) “sajikan semua subdomains di atas HTTPS” — including di particular
wwwsubdomain jika sebuah DNS record ada. - pada base domain’s HTTPS respons, sebuah HSTS header di mana “the
max-agemust be at least31536000seconds (1 year),” (terjemahan) “max-ageharus menjadi setidaknya31536000seconds (1 tahun),” “theincludeSubDomainsdirective must be specified,” (terjemahan) “includeSubDomainsdirective harus menjadi specified,” dan “thepreloaddirective must be specified.” (terjemahan) “preloaddirective harus menjadi specified.” (hstspreload.org)
itu’s mengapa dua-tahun contoh di atas (max-age=63072000; includeSubDomains; preload)
adalah shape orang submit — note ini adalah tepat submission requirements sebagai
published oleh hstspreload.org; treat them sebagai saat ini bar, tidak sebuah permanent
constant, dan re-periksa langsung halaman sebelum Anda submit.
ini helps untuk pertahankan four distinct status straight, since orang conflate them constantly:
| State | apa sebenarnya benar |
|---|---|
| Token present | Anda header mencakup preload. ini adalah sebuah flag hanya — ini melakukan tidak ada apa pun oleh itself dan tidak put Anda pada apa pun list. |
| Eligible | Anda situs memenuhi semua four hstspreload.org requirements di atas (cert, redirect, subdomains, header shape). masih tidak pada list. |
| Submitted / pending | Anda’ve submitted di hstspreload.org dan ini adalah queued untuk inclusion di sebuah upcoming browser rilis. Belum enforced untuk pengguna nyata. |
| Sebenarnya listed | domain adalah baked ke sebuah diberikan browser’s shipped bangun. Enforcement hanya ada untuk pengguna pada itu bangun — rollout tidak instant atau universal di seluruh browser. |
Removal berjalan yang sama four status di reverse, dan hanya sebagai slowly: menghapus
preload directive dari Anda header membuat Anda eligible untuk removal form, lalu
submission adalah pending, dan domain tetap enforced untuk apa pun pengguna pada sebuah browser bangun
itu masih ships ini — until itu bangun cycles out.
Now bagian itu turns preload ke sebuah satu-cara door. dari submission situs itself: “Be aware that inclusion in the preload list cannot easily be undone. Domains can be removed, but it takes months for a change to reach users with a Chrome update and we cannot make guarantees about other browsers.” (terjemahan) “menjadi aware itu inclusion di preload list cannot easily menjadi undone. Domains dapat menjadi dihapus, tetapi ini takes months untuk sebuah perubahan untuk reach pengguna dengan sebuah Chrome perbarui dan kami cannot membuat jaminan tentang lainnya browser.” (hstspreload.org). dan -nya own advice: “Don’t request inclusion unless you’re sure that you can support HTTPS for your entire site and all its subdomains in the long term.” (terjemahan) “jangan permintaan inclusion unless Anda’re sure itu Anda dapat mendukung HTTPS untuk Anda entire situs dan semua -nya subdomains di panjang istilah.”
Practical translation: preload adalah sebuah genuinely great security posture, tetapi jika Anda ever perlu untuk sajikan apa pun — sebuah legacy subdomain, sebuah acquired brand, sebuah internal alat — di atas plain HTTP again, Anda’re stuck menunggu pada browser rilis cycles untuk reach setiap pengguna. Kinsta’s guide puts operational reality plainly: ini dapat menjadi sebuah difficult dan time-consuming proses untuk mendapatkan Anda domain dihapus. Treat preload sebagai permanent.
Mengapa HSTS adalah designed untuk hurt ketika hal break
HSTS’s strictness adalah tidak sebuah bug — ini adalah entire security jaminan. web.dev spells out tradeoff: “Clients that have listed your site as a known HSTS Host are likely to hard-fail if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can’t trick clients into accessing the site without HTTPS.” (terjemahan) “Clients itu memiliki listed Anda situs sebagai sebuah known HSTS Host adalah mungkin untuk hard-fail jika Anda situs ever memiliki sebuah error di -nya TLS configuration, (such sebagai sebuah expired certificate). HSTS adalah explicitly designed ini cara untuk ensure itu network attackers dapat’t trick clients ke accessing situs tanpa HTTPS.” (web.dev).
conclusion Google draws adalah kalimat I’d tattoo pada anyone tentang untuk flip ini pada: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (terjemahan) “jangan enable HSTS until Anda’re certain Anda situs operation adalah robust cukup untuk hindari ever deploying HTTPS dengan certificate validation errors.” (web.dev).
“Hard-fail” (terjemahan) “Hard-fail” berarti persis itu: Tidak “proceed anyway” (terjemahan) “proceed anyway” tautan, Tidak click-melalui. pada sebuah wajar HTTPS halaman, sebuah expired cert throws sebuah scary interstitial itu sebuah determined pengguna dapat bypass. pada sebuah HSTS host, browser refuses outright. So failure mode dari sebuah missed certificate renewal perubahan category — dari “traffic dips because people are scared off” (terjemahan) “traffic dips karena orang adalah scared off” untuk “the site is unreachable for every returning visitor.” (terjemahan) “ situs adalah unreachable untuk setiap returning pengunjung.”
dunia nyata lockout scenarios
cara HSTS bites dalam praktik hampir selalu trace back untuk includeSubDomains atau
preload getting ahead dari Anda sebenarnya HTTPS coverage:
- ** forgotten subdomain.** Anda set
includeSubDomainspadaexample.com, tetapilegacy.example.com(sebuah old app, sebuah status halaman, sebuah vendor alat) hanya speaks HTTP atau memiliki sebuah cert itu tidak cover ini. setiap browser itu saw header now refuses untuk muat itu subdomain. Tidak ada apa pun changed pada itu server — policy reached down dan broke ini. - ** wildcard-cert kesenjangan.** sebuah
*.example.comwildcard coversfoo.example.comtetapi tidakfoo.bar.example.com(sebuah wildcard adalah satu DNS label deep). jika sebuah deeper subdomain relies pada HTTP atau sebuah mismatched cert,includeSubDomainslocks ini out. - ** expired cert pada sebuah HSTS host.** Renewal automation fails, cert lapses, dan alih-alih sebuah bypassable warning Anda mendapatkan sebuah situs itu’s down untuk everyone milik siapa browser remembers Anda policy — until Anda mendapatkan sebuah valid cert back dan mereka reconnect dan menerima sebuah fresh secure respons. tidak ada lebih cepat override.
- Preload regret. Anda preloaded, lalu sebuah business perlu forces sebuah HTTP-hanya
service di bawah domain. Rolling itu back adalah dua terpisah, non-instant jobs, tidak
satu: serving
max-age=0di atas HTTPS hanya clears learned policy untuk clients itu reconnect sebelum mereka old max-age akan’ve expired anyway, sementara getting domain out dari preload list adalah sebuah distinct submission itu masih takes browser rilis cycles — months — untuk reach pengguna, independent dari apa pun Anda perubahan pada Anda server. - Local dev / staging collisions. Preloading
example.comdenganincludeSubDomainsdapat membuatdev.example.comatau sebuahlocalhost-style internal host di bawah yang sama apex refuse HTTP, breaking local workflows di surprising cara.
None dari ini adalah alasan untuk hindari HSTS. mereka’re alasan untuk stage ini: pendek
max-age pertama, tambahkan includeSubDomains hanya setelah auditing setiap subdomain, dan
reserve preload untuk ketika Anda’re certain.
HSTS adalah tidak sebuah peringkat play (dan tidak touch canonicalization)
untuk menjadi jelas pada SEO framing: HSTS adalah tidak sebuah sinyal peringkat. HTTPS itself adalah
sebuah dengan sengaja tiny satu — Google called ini sebuah “very lightweight
signal” (terjemahan) “very lightweight
sinyal” affecting fewer daripada 1% dari kueri — dan HSTS adalah sebuah layer pada top dari HTTPS, tidak
sebuah terpisah peringkat input. ini juga tidak secara langsung control canonicalization atau
pengindeksan. Google’s own documentation adalah lebih spesifik daripada sebuah flat “doesn’t matter,” (terjemahan) “tidak penting,”
though: Google prefers HTTPS sebagai canonical di atas sebuah equivalent HTTP halaman except
ketika ada sebuah tidak valid certificate, insecure halaman dependencies, sebuah HTTPS halaman itu
redirects untuk HTTP, atau sebuah HTTP rel="canonical" tag
(Google: consolidating duplicate URLs).
HSTS cannot perbaiki atau override apa pun dari itu. ini adalah sebuah browser-side policy dengan Tidak
influence pada Google’s canonicalization logic — sebuah buruk certificate atau sebuah rusak redirect
chain dapat masih push Google toward sebuah HTTP canonical regardless dari apa Anda HSTS
header says. Canonicalization adalah driven oleh Anda 301s, Anda certificate, Anda
rel="canonical", dan Anda tautan internal — HSTS earns -nya place untuk security,
pengguna trust, dan closing SSL-stripping kesenjangan — melakukan ini untuk itu alasan, pertahankan
301s dan certificate genuinely solid, dan Anda’ll tidak pernah see HSTS itself pada sebuah rankings
report either cara.
jika Anda’re berjalan lebih luas HTTP→HTTPS move, HSTS adalah terakhir hal Anda switch pada, tidak pertama — ini belongs setelah migration memiliki settled, sebagai bagian dari wider situs migration discipline.
AI summary
sebuah condensed take pada Advanced versi:
- HSTS =
Strict-Transport-Securityrespons header. ini tells browser untuk selalu gunakan HTTPS untuk Anda domain, closing “pertama request problem” (terjemahan) “pertama permintaan masalah” sebuah 301 alone leaves open — awal HTTP permintaan dari sebuah baru pengunjung adalah insecure until redirect fires, yang adalah SSL-stripping window. - Three directives:
max-age(diperlukan, seconds; resets pada setiap respons; menghapus header tidak jelas sebuah learned policy — Anda harus sajikanmax-age=0di atas HTTPS alih-alih),includeSubDomains(applies untuk semua subdomains), danpreload(sebuah flag untuk opt ke browser preload list — token present, eligible, submitted, dan sebenarnya listed adalah four terpisah status). - ** internal-upgrade crux:** ketika sebuah browser enforces HSTS ini rewrites URI untuk HTTPS internally sebelum apa pun permintaan reaches sebuah server — RFC 6797 tidak mandate sebuah spesifik kode status untuk itu rewrite, though alat sering tampilkan ini sebagai sebuah 307 — so Tidak server sees ini dan crawler tidak pernah see ini. Anda server-side 301s adalah masih mandatory untuk mesin pencari dan tautan equity. HSTS adalah pada top dari Anda 301s, tidak pernah alih-alih them.
- Preload hardcodes Anda domain ke browser melalui
hstspreload.org (memerlukan
max-age≥ 31536000,includeSubDomains, danpreload). ini adalah close untuk irreversible — removal adalah sebuah terpisah submission itu takes months untuk reach pengguna, browser oleh browser. - Designed untuk hard-fail: sebuah HSTS host dengan sebuah rusak/expired cert refuses untuk muat, dengan Tidak click-melalui. Google: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (terjemahan) “jangan enable HSTS until Anda’re certain Anda situs operation adalah robust cukup untuk hindari ever deploying HTTPS dengan certificate validation errors.”
- Lockout scenarios cluster sekitar
includeSubDomainsdan preload outrunning Anda HTTPS coverage: forgotten HTTP subdomains, wildcard-cert depth gaps, lapsed certs, preload regret, dan staging collisions. - Tidak sebuah sinyal peringkat — dan dapat’t override canonicalization. Google prefers HTTPS sebagai canonical except ketika sebuah cert adalah tidak valid, dependencies adalah insecure, sebuah HTTPS halaman redirects untuk HTTP, atau tag canonical poin untuk HTTP — dan HSTS memiliki Tidak power untuk perbaiki atau override apa pun dari itu. pertahankan 301s, certificate, dan canonical tags melakukan SEO berfungsi.
Dokumentasi resmi
Utama-sumber documentation dari browser dan standards tim.
Google / web.dev
- Enable HTTPS pada Anda server (web.dev) — HSTS bagian: header, SSL-stripping, hard-fail warning, dan “don’t enable HSTS until you’re certain.” (terjemahan) “jangan enable HSTS until Anda’re certain.”
- situs moves dengan URL perubahan — mengapa server-side 301 adalah masih mandatory (redirects jangan lose PageRank).
- Understanding pengalaman halaman — di mana HTTPS (dan oleh extension HSTS) sits di Google’s framing.
Standards & browser references
- MDN —
Strict-Transport-Security— penuh header syntax, three directives, dan bagaimana browser upgrades scheme. - RFC 6797 — HTTP Strict Transport Security (HSTS) — original specification.
- HSTS Preload List submission (hstspreload.org) — tepat preload requirements dan removal caveats, maintained oleh Chromium project.
Quotes dari sumber
pada—record statements dari Google/web.dev dan Chromium preload service. setiap tautan jumps untuk (atau poin di) quoted passage pada sumber halaman.
web.dev (Google) — apa HSTS melakukan dan warnings
- “Use HTTP Strict Transport Security (HSTS) to avoid the cost of the 301 redirect.” (terjemahan) “gunakan HTTP Strict Transport Security (HSTS) untuk hindari cost dari 301 redirect.” Jump untuk quote
- “First, use Strict Transport Security to tell clients they should always connect to
your server using HTTPS, even when following an
http://reference. This defeats attacks like SSL Stripping, and avoids the round-trip cost of the 301 redirect.” (terjemahan) “pertama, gunakan Strict Transport Security untuk tell clients mereka seharusnya selalu connect untuk Anda server menggunakan HTTPS, bahkan ketika berikut sebuahhttp://reference. ini defeats attacks like SSL Stripping, dan menghindari round-trip cost dari 301 redirect.” Jump untuk quote - “Clients that have listed your site as a known HSTS Host are likely to hard-fail if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can’t trick clients into accessing the site without HTTPS.” (terjemahan) “Klien yang telah mencatat situs Anda sebagai Host HSTS akan mengalami kegagalan keras jika konfigurasi TLS situs bermasalah, misalnya karena sertifikat kedaluwarsa. HSTS memang dirancang seperti ini agar penyerang jaringan tidak dapat mengelabui klien supaya membuka situs tanpa HTTPS.” Jump untuk quote
- “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (terjemahan) “jangan enable HSTS until Anda’re certain Anda situs operation adalah robust cukup untuk hindari ever deploying HTTPS dengan certificate validation errors.” Jump untuk quote
Chromium preload service — hstspreload.org
- “Be aware that inclusion in the preload list cannot easily be undone. Domains can be removed, but it takes months for a change to reach users with a Chrome update and we cannot make guarantees about other browsers.” (terjemahan) “Pencantuman dalam daftar preload tidak mudah dibatalkan. Domain dapat dihapus, tetapi perubahan itu memerlukan waktu berbulan-bulan untuk menjangkau pengguna melalui pembaruan Chrome, dan tidak ada jaminan untuk peramban lain.” Sumber
- “Don’t request inclusion unless you’re sure that you can support HTTPS for your entire site and all its subdomains in the long term.” (terjemahan) “jangan permintaan inclusion unless Anda’re sure itu Anda dapat mendukung HTTPS untuk Anda entire situs dan semua -nya subdomains di panjang istilah.” Sumber
MDN — header perilaku
- “Before loading an
httpURL, the browser checks the domain name against its HSTS hosts list. If the domain name is a case insensitive match for an HSTS host or is a subdomain of one that specifiedincludeSubDomains, then the browser replaces the URL scheme withhttps.” (terjemahan) “Sebelum memuat URLhttp, peramban memeriksa nama domain terhadap daftar host HSTS. Jika namanya cocok tanpa membedakan huruf besar-kecil dengan host HSTS, atau merupakan subdomain dari host yang menetapkanincludeSubDomains, peramban mengganti skema URL menjadihttps.” Sumber
seharusnya I enable HSTS — dan bagaimana far?
Walk ini top untuk bottom. setiap “Tidak” (terjemahan) “Tidak” adalah sebuah berhenti sign, tidak sebuah maybe. Satu pembedaan sebelum
Anda mulai: tepat max-age figures di bawah (sebuah sedikit minutes untuk sebuah canary, sebuah tahun untuk
sebuah resting state) adalah Patrick’s operational staging recommendations, tidak protocol
requirements — satu-satunya hard numeric requirement adalah hstspreload.org’s preload
minimum (max-age ≥ 31536000), yang adalah called out explicitly di itu langkah. Adjust
staging durations untuk Anda own risk tolerance dan deployment cadence.
1. adalah Anda seluruh situs sudah pada HTTPS dengan sebuah valid certificate, dan memiliki migration settled?
- Tidak → jangan touch HSTS namun. Finish HTTPS migration pertama: 301 setiap URL, perbaiki mixed konten, verify di Search Console. HSTS adalah terakhir switch, tidak pertama.
- Ya → continue.
2. adalah Anda certificate renewal automated dan monitored (so sebuah lapse dapat’t sneak up pada Anda)?
- Tidak → Perbaiki itu pertama. pada sebuah HSTS host sebuah lapsed cert adalah sebuah hard outage, tidak sebuah warning. Mendapatkan auto-renewal + expiry alerting di place, lalu continue.
- Ya → continue. Enable sebuah pendek
max-age(e.g. sebuah sedikit minutes untuk sebuah day) dengan TidakincludeSubDomainsnamun, dan konfirmasi tidak ada apa pun breaks.
3. memiliki Anda audited setiap subdomain — including www, legacy apps, status halaman,
dan vendor hosts — dan confirmed setiap menyajikan valid HTTPS?
- Tidak → pertahankan
includeSubDomainsoff. menambahkan ini now akan reach down dan break apa pun HTTP-hanya atau mismatched-cert subdomain. - Ya → Raise
max-agetoward sebuah tahun dan tambahkanincludeSubDomains. ini adalah sebuah safe, strong resting state untuk sebagian besar situs.
4. melakukan Anda ingin close pertama-ever-visit kesenjangan too, dan adalah Anda certain Anda’ll tidak pernah perlu untuk sajikan apa pun di bawah ini domain di atas plain HTTP again?
- Tidak / tidak sure → Berhenti di sini.
max-age=31536000; includeSubDomains(Tidak preload) adalah sebuah excellent posture. Preload’s marginal gain tidak worth -nya irreversibility jika Anda’re unsure. - Ya, certain → tambahkan
preloadflag dan submit di hstspreload.org. Treat ini sebagai permanent — removal takes months untuk reach pengguna.
Terpisah, selalu-benar branch: melakukan enabling HSTS berarti I dapat drop my 301s?
- tidak pernah. crawler jangan see HSTS’s browser-hanya internal upgrade. pertahankan server-side 301s regardless dari bagaimana far down ini tree Anda go.
HSTS rollout checklist
berfungsi top untuk bottom — setiap stage gates berikutnya. staged durations di sini adalah
operational recommendations, tidak protocol requirements — satu-satunya hard angka adalah
preload’s max-age ≥ 31536000 minimum di Stage 3.
sebelum Anda enable apa pun
- Entire situs (apex +
www+ semua subdomains) menyajikan HTTPS dengan sebuah valid cert. - HTTP→HTTPS 301 redirects adalah di place server-side, satu-untuk-satu.
- Certificate auto-renewal adalah configured dan expiry monitoring/alerting ada.
- HTTP→HTTPS migration memiliki settled (Search Console bersih, Tidak peringkat freefall).
Stage 1 — prove ini adalah safe
- tambahkan
Strict-Transport-Securitydengan sebuah pendekmax-age(minutes untuk sebuah day). - Tidak
includeSubDomainsnamun. Tidakpreloadnamun. - Konfirmasi situs memuat biasanya di seluruh browser dan itu tidak ada apa pun broke.
Stage 2 — commit
- Raise
max-ageuntuk setidaknya31536000(satu tahun). - Audit setiap subdomain (incl.
www, legacy, status, vendor) untuk valid HTTPS. - hanya setelah itu audit melewati, tambahkan
includeSubDomains. - Re-test setiap subdomain memuat di atas HTTPS.
Stage 3 — preload (opsional, near-permanent)
- Anda’re certain Anda’ll tidak pernah perlu HTTP di bawah ini domain again.
- Header adalah
max-age=31536000(atau lebih); includeSubDomains; preload. - HTTP pada port 80 redirects untuk HTTPS pada yang sama host.
- Submit dan konfirmasi status di hstspreload.org.
selalu benar — jangan skip
- server-side 301s stay di place (crawler tidak pernah see browser-hanya internal upgrade).
- Anda memiliki sebuah terdokumentasi rollback plan:
max-age=0disajikan di atas HTTPS clears sebuah learned (non-preloaded) policy untuk clients itu reconnect sebelum ini akan’ve expired anyway. Preloaded domains perlu terpisah, lebih lambat removal-form proses alih-alih.
mental models
1. HSTS adalah sebuah layer, tidak sebuah replacement. server-side 301 = untuk crawler dan tautan equity. browser-side internal upgrade (dari HSTS, sering ditampilkan sebagai sebuah 307 though RFC tidak memerlukan itu tepat code) = untuk returning humans dan SSL-stripping protection. berbeda audiences, berbeda jobs. Anda selalu perlu keduanya; HSTS tidak pernah subtracts sebuah 301.
2. HSTS closes sebuah kesenjangan 301 dapat’t. sebuah 301 melindungi kedua permintaan onward. pertama permintaan — sebelum redirect fires — adalah masih HTTP. HSTS (untuk returning pengunjung) dan preload (untuk pertama-ever pengunjung) adalah satu-satunya hal itu close itu spesifik window.
3. Ratchet up, tidak pernah jump.
max-age pendek → panjang. Bare header → includeSubDomains (setelah sebuah subdomain audit) →
preload (hanya jika certain). setiap rung adalah reversible except terakhir. jangan skip
rungs untuk save time.
4. Strictness adalah fitur, dan ini cuts keduanya cara. yang sama hard-fail itu berhenti sebuah attacker juga berhenti Anda ketika sebuah cert breaks. So prerequisite tidak “lakukan Anda ingin security?” (terjemahan) “melakukan Anda ingin security?” — everyone melakukan — ini adalah “adalah Anda certificate operation robust cukup untuk never fail?” (terjemahan) “adalah Anda certificate operation robust cukup untuk tidak pernah fail?”
5. Preload adalah sebuah satu-cara door.
Non-preloaded HSTS dapat menjadi relaxed untuk sebuah client berikutnya time ini membuat sebuah secure
permintaan dan menerima max-age=0 — Tidak lebih cepat daripada itu, dan hanya untuk clients siapa
reconnect. Preload takes ini sebuah langkah further: removal adalah sebuah terpisah submission itu
takes months untuk reach pengguna, browser rilis oleh browser rilis. Put ini di
“decisions we tidak dapat easily take back” (terjemahan) “decisions kami dapat’t easily take back” bucket dan treat ini accordingly.
6. HSTS adalah orthogonal untuk rankings — tetapi dapat’t rescue sebuah buruk canonical sinyal either. ini adalah tidak sebuah sinyal peringkat dan tidak secara langsung control canonicalization atau pengindeksan. Judge ini pada security dan trust, tidak pada SEO upside — di sana tidak apa pun. tetapi ini adalah tidak sebuah safety net either: Google’s HTTPS-canonical preference masih backs off untuk sebuah buruk cert, insecure dependencies, sebuah HTTPS→HTTP redirect, atau sebuah HTTP tag canonical, dan HSTS memiliki Tidak power untuk override itu.
HSTS — cheat sheet
** header directives**
| Directive | diperlukan? | Apa ini melakukan |
|---|---|---|
max-age=<seconds> | Ya | Bagaimana panjang browser enforces HTTPS-hanya. Resets pada setiap respons di atas HTTPS; menghapus header tidak jelas ini — Anda harus sajikan max-age=0 di atas HTTPS untuk disable untuk reconnecting clients. |
includeSubDomains | Tidak | Applies policy untuk setiap subdomain too. Audit semua subdomains pertama. |
preload | Tidak | Flag opting ke browser preload list (perlu lainnya dua + hstspreload.org). Token present, eligible, submitted, dan sebenarnya listed adalah four terpisah status. Near-irreversible setelah listed. |
umum header nilai (staging figures di bawah adalah operational suggestions, tidak protocol requirements — hard minimum adalah preload baris)
| nilai | Meaning |
|---|---|
max-age=300 | 5 minutes — sebuah safe pertama test. |
max-age=31536000 | 1 tahun — standard resting state. |
max-age=31536000; includeSubDomains | 1 tahun, semua subdomains — strong, non-preload. |
max-age=63072000; includeSubDomains; preload | 2 tahun + preload — shape Anda submit (hstspreload.org’s diperlukan minimum adalah max-age ≥ 31536000). |
max-age=0 (disajikan di atas HTTPS) | Clears sebuah learned policy untuk clients itu reconnect. melakukan tidak hapus sebuah preload listing. |
Redirects: yang satu, siapa sees ini
| Redirect | Origin | Siapa sees ini | Job |
|---|---|---|---|
| 301 | Anda server | crawler dan humans | SEO: memahami move, carry tautan equity |
| Internal upgrade (sering ditampilkan sebagai sebuah 307; RFC 6797 tidak mandate tepat code) | browser (HSTS) | Returning humans hanya — crawler tidak pernah see ini | Security/UX: skip insecure pertama hop |
Fast facts
- Preload memerlukan
max-age≥ 31536000 +includeSubDomains+preload— verified terhadap hstspreload.org’s saat ini published requirements. - Preload removal adalah sebuah terpisah submission itu takes months untuk reach pengguna, browser oleh browser — treat sebagai permanent.
- pada sebuah HSTS host, sebuah rusak cert = hard-fail, Tidak click-melalui.
- HSTS adalah tidak sebuah sinyal peringkat dan melakukan tidak replace Anda 301s.
atur HSTS header
tambahkan header pada Anda HTTPS server block hanya, dan mulai dengan sebuah pendek max-age
until Anda’ve confirmed tidak ada apa pun breaks. tambahkan ; preload hanya ketika Anda intend untuk
submit untuk hstspreload.org — ini adalah close untuk irreversible.
Apache (.htaccess)
<IfModule mod_headers.c>
# Start short (300s) to prove it's safe; raise to 31536000 once confident.
Header always set Strict-Transport-Security "max-age=300"
# Full posture once every subdomain is verified HTTPS:
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Only add ; preload when submitting to hstspreload.org:
# Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>Nginx
# On the HTTPS (listen 443) server block:
add_header Strict-Transport-Security "max-age=300" always;
# Full posture once subdomains are verified:
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Preload shape (near-irreversible):
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;periksa apakah HSTS adalah set (dan baca ini back)
macOS / Linux
# Print only the Strict-Transport-Security response header
curl -sI https://example.com/ | grep -i strict-transport-security
# → strict-transport-security: max-age=31536000; includeSubDomainsWindows (PowerShell)
# Same check in PowerShell
(Invoke-WebRequest -Uri "https://example.com/" -Method Head).Headers["Strict-Transport-Security"]Inspect dan jelas sebuah HSTS entry di Chrome (DevTools / net-internals)
jika Anda’re testing dan sebuah browser memiliki “learned” (terjemahan) “learned” sebuah HSTS policy Anda perlu jelas:
1. Open a new tab and visit: chrome://net-internals/#hsts
2. Under "Query HSTS/PKP domain", enter your host to see the stored policy.
3. Under "Delete domain security policies", enter the host and Delete.
(This clears the *learned* policy — it does NOT remove a *preloaded* domain,
which lives in the browser binary and can't be cleared this way.)gunakan ini untuk konfirmasi Anda header adalah sebenarnya menjadi stored, dan untuk reset sebuah test host —
tidak sebagai sebuah perbaiki untuk production, di mana jawaban adalah untuk actively sajikan max-age=0 di atas
HTTPS (sekadar menghapus header tidak jelas sebuah policy sebuah client sudah learned;
ini hanya takes effect setelah itu client reconnects dan menerima max-age=0
respons).
HSTS mistakes itu bite
1. Dropping Anda 301s karena “HSTS handles it.” (terjemahan) “HSTS menangani ini.” classic. HSTS’s redirect adalah sebuah browser-hanya internal upgrade crawler tidak pernah see. hapus Anda server-side 301s dan mesin pencari lose sinyal itu consolidates Anda move. pertahankan keduanya, selalu.
2. Enabling includeSubDomains sebelum auditing subdomains.
single sebagian besar umum cara untuk take sebuah subdomain offline. jika apa pun subdomain — sebuah legacy
app, sebuah status halaman, sebuah vendor host, www itself — tidak pada valid HTTPS, policy
reaches down dan breaks ini untuk setiap browser itu saw header.
3. Jumping straight untuk sebuah satu-tahun max-age (atau preload) pada day satu.
Tidak safety net. Mulai pendek (max-age=300), konfirmasi tidak ada apa pun breaks, lalu ratchet up.
sebuah panjang max-age set pada sebuah misconfigured situs adalah sebuah self-inflicted outage itu lingers
di browser untuk sebuah tahun.
4. Preloading sebelum HTTPS adalah genuinely bulletproof. Preload adalah near-irreversible — removal takes months. Google’s own line: jangan enable HSTS until Anda’re certain Anda situs operation adalah robust cukup. Preload multiplies itu stakes.
5. Treating sebuah lapsed certificate sebagai sebuah minor issue. pada sebuah non-HSTS situs sebuah expired cert adalah sebuah bypassable warning. pada sebuah HSTS host ini adalah sebuah hard outage dengan Tidak click-melalui. jika Anda enable HSTS, cert renewal automation dan expiry alerting berhenti menjadi nice-untuk-haves.
6. Setting header pada respons HTTP. browser ignore HSTS delivered di atas HTTP (oleh design — sebuah attacker dapat inject atau strip ini). ini harus menjadi dikirim pada HTTPS respons untuk count.
7. Forgetting wildcard-cert depth limit.
sebuah *.example.com wildcard tidak cover foo.bar.example.com. Turn pada
includeSubDomains dan apa pun deeper subdomain relying pada itu cert mendapatkan locked out.
Incident playbook: sebuah HSTS host adalah locked out
- Konfirmasi failure dari sebuah bersih network dan lebih daripada satu browser. Record affected hostnames dan tepat certificate error. sebuah remembered HSTS policy dapat membuat symptom differ antara returning dan pertama-time pengunjung.
- Restore valid HTTPS pertama. jika certificate adalah expired, mismatched, atau missing sebuah intermediate, renew atau replace ini dan deploy menyelesaikan chain. sebuah HSTS browser akan tidak offer sebuah safe HTTP bypass.
- Map policy cakupan. Inspect langsung
Strict-Transport-Securityheader dan determine apakahincludeSubDomainsatau preload extends outage beyond hostname itu dikirim ini. - Inventory setiap affected subdomain. untuk sebuah forgotten HTTP-hanya host, put sebuah valid certificate dan HTTPS endpoint di front dari ini sebelum deciding apakah untuk pertahankan, migrate, atau redirect service.
- Correct policy hanya setelah access adalah restored. jika cakupan adalah unsafe, reduce atau hapus header pada HTTPS respons. itu melakukan tidak instantly jelas sebuah policy sudah cached oleh browser, dan preload removal adalah sebuah terpisah, slow proses.
- Verify recovery. Test apex,
www, dan setiap affected subdomain untuk sebuah valid chain, correct hostname, satu-hop HTTP→HTTPS redirect, dan yang dimaksud HSTS header. pertahankan certificate-expiry monitoring pada yang sama inventory.
melakukan tidak tear down HTTP redirect atau tell pengguna untuk bypass warning. durable perbaiki adalah sebuah valid HTTPS endpoint di mana-mana active HSTS policy reaches.
Audit sebuah langsung HSTS policy
Act as a security-minded technical SEO. Review this Strict-Transport-Security
header, the HTTP redirect response, and the supplied subdomain inventory.
For the header, parse max-age, includeSubDomains, and preload. Explain the effective
scope, identify subdomains whose HTTPS or certificate coverage is unproven, and
separate browser-side HSTS behavior from the server-side 301 search engines need. Use
GET requests (HEAD can behave differently on some servers/clients), and record which
client or tool produced each observation and its version, since internal-redirect
representation is client/tool-specific rather than a fixed protocol value.
Recommend the next rollout stage: keep a short max-age canary, lengthen max-age,
add includeSubDomains, or consider preload. Do not recommend preload unless the
evidence shows a valid certificate, same-host HTTP→HTTPS redirects, HTTPS on every
subdomain, max-age of at least 31536000, includeSubDomains, and the preload token.
Return: observed configuration, risks, blocking evidence, next action, rollback
constraint, and exact validation checks.Triage sebuah HSTS lockout
Given the affected hostnames, browser error, certificate details, DNS/CDN layout,
and live response headers, identify whether this is an expired certificate, hostname
mismatch, incomplete chain, includeSubDomains spillover, or preload issue. Prioritize
restoring valid HTTPS. Explain why removing a header does not immediately erase a
cached browser policy, then provide recovery and verification steps. HSTS inspection toolkit
- header HTTP Checker — inspect langsung
Strict-Transport-Securityheader dan konfirmasi ini muncul pada HTTPS respons. curl -I— bandingkan HTTP redirect dengan HTTPS header tanpa relying pada sebuah browser’s remembered HSTS state.- browser DevTools — konfirmasi akhir respons headers dan certificate error seen oleh sebuah nyata client.
- HSTS preload status — periksa submission requirements dan apakah domain adalah sudah represented di preload proses.
gunakan setidaknya dua views: command-line output menampilkan server respons, sementara sebuah browser juga exposes client-side enforcement dan certificate hard failures. Prefer Mendapatkan di atas HEAD ketika comparing alat — beberapa server dan clients mewakili dua differently — dan note tepat client/alat/versi behind setiap reading.
Staged HSTS rollout tests
Test 0: state matrix (jalankan ini sebelum staging perubahan)
HSTS status tidak satu fact — ini adalah several independent status itu dapat disagree. Track them secara terpisah, per hostname:
| Dimension | Apa untuk periksa | Notes |
|---|---|---|
| Langsung HTTPS header, oleh respons class | Strict-Transport-Security nilai pada nyata HTTPS respons (home halaman, deep halaman, API/asset respons dapat differ) | gunakan Mendapatkan, tidak HEAD — beberapa server/CDNs vary header emission oleh metode |
| Port-80 redirect | sebuah genuine server-side redirect ada pada port 80, tidak hanya reliance pada sebuah learned client policy | ini adalah apa pertama-time dan non-HSTS clients bergantung pada |
| Certificate coverage | Valid chain untuk apex, www, dan setiap subdomain di cakupan | Wildcard certs jangan cover sebuah kedua DNS label deep |
| Parent vs. entry-poin subdomains | Apakah sebuah secara langsung-visited subdomain memiliki sebenarnya diterima -nya own HSTS respons, since ini dapat tidak inherit sebuah parent’s learned policy cara includeSubDomains implies pada paper | Test setiap entry poin secara langsung, tidak hanya apex |
| Learned state, fresh vs. returning client | perilaku pada sebuah client itu memiliki tidak pernah seen Anda header vs. satu itu memiliki | jelas browser HSTS state (atau gunakan bersih profile) untuk simulate “fresh” (terjemahan) “fresh” |
| Sebenarnya preload status | Apakah domain adalah listed di sebuah diberikan browser’s shipped bangun, tidak hanya submitted | periksa melalui browser’s own status halaman/flag, tidak hanya submission form |
Record client, alat, dan versi untuk setiap observation — internal-redirect representation dan HSTS enforcement detail vary di seluruh browser, crawler, dan command-line alat, dan sebuah stale reading dari satu client dapat look like sebuah contradiction itu tidak nyata.
Test 1: pendek max-age canary
- Purpose: Prove header adalah emitted hanya dari healthy HTTPS respons sebelum committing clients untuk sebuah panjang policy.
- metode: Inspect representative templates dan hosts dengan header HTTP Checker
dan
curl -I; bandingkan deployed nilai dengan approved canary configuration. - Yang diharapkan hasil: HTTPS respons carry yang dimaksud pendek
max-age; HTTP masih mengembalikan sebuah server-side permanent redirect untuk HTTPS. - Failure trigger: Missing atau duplicated headers, sebuah unexpected panjang duration, certificate errors, atau apa pun redirect loop.
- Berikutnya tindakan: Perbaiki header atau HTTPS endpoint dan pertahankan rollout di canary stage.
Test 2: includeSubDomains readiness
- Purpose: mencegah sebuah parent policy dari locking out sebuah forgotten hostname.
- metode: Test setiap DNS hostname di maintained subdomain inventory untuk sebuah valid HTTPS respons, correct certificate name, dan menyelesaikan chain.
- Yang diharapkan hasil: setiap di-cakupan subdomain berfungsi di atas HTTPS, including legacy, vendor, development, dan deeper-tingkat hosts.
- Failure trigger: apa pun HTTP-hanya service, expired atau mismatched certificate, atau hostname missing dari inventory.
- Berikutnya tindakan: Remediate atau relocate host sebelum menambahkan
includeSubDomains.
Test 3: preload readiness
- Purpose: Verify near-permanent policy satisfies terdokumentasi submission requirements.
- metode: Konfirmasi sebuah valid certificate, sama-host HTTP→HTTPS redirects, HTTPS pada
semua subdomains, dan sebuah apex header dengan
max-agedari setidaknya31536000,includeSubDomains, danpreload. - Yang diharapkan hasil: setiap requirement melewati dan organization accepts slow removal path.
- Failure trigger: apa pun failed teknis requirement atau sebuah unresolved perlu untuk sebuah HTTP-hanya subdomain.
- Berikutnya tindakan: melakukan tidak submit; tetap pada reversible staged policy.
Resources worth Anda time
My speaking
- Better Safe daripada Sorry dengan HTTPS — SMX East 2016 (SlideShare) — my deep-dive pada TLS, umum HTTPS implementation failures, dan migration gotchas itu HSTS keduanya closes dan dapat amplify. (Standing disclaimer applies: ini adalah my understanding dari ini sistem, dan adoption stats di ini adalah dari 2016.)
My related writing
- Beginner’s Guide untuk SEO teknis — di mana HTTPS dan HSTS fit di bigger picture.
dari sekitar industry
- Enable HTTPS pada Anda server (web.dev) — Google’s own HSTS guidance: header, SSL-stripping, dan hard-fail warning.
- MDN —
Strict-Transport-Security— authoritative header reference: syntax, directives, dan scheme-upgrade perilaku. - HSTS Preload List submission (hstspreload.org) — Chromium project’s preload requirements dan near-irreversibility caveats.
- RFC 6797 — HTTP Strict Transport Security — original specification, untuk ketika Anda perlu tepat wording dari sebuah directive.
- HSTS — Apa ini adalah dan cara gunakan ini (Kinsta) — sebuah practical implementation guide covering browser-tingkat internal redirect, preload list, dan lock-di risks.
- SSL Labs server Test (Qualys) — grade Anda TLS configuration dan konfirmasi HSTS adalah menjadi disajikan correctly.
Stats dan hard facts worth citing
- Preload memerlukan
max-age≥ 31536000 (1 tahun),includeSubDomains, danpreload. tepat, non-negotiable submission bar untuk browser-baked list. Sumber - Preload removal takes months untuk reach pengguna. dari submission service: “inclusion in the preload list cannot easily be undone… it takes months for a change to reach users with a Chrome update.” (terjemahan) “inclusion di preload list cannot easily menjadi undone… ini takes months untuk sebuah perubahan untuk reach pengguna dengan sebuah Chrome perbarui.” ini adalah angka itu membuat preload sebuah satu-cara door. Sumber
- HSTS hosts hard-fail pada apa pun TLS error. web.dev: clients itu know Anda situs sebagai sebuah HSTS host “are likely to hard-fail if your site ever has an error in its TLS configuration.” (terjemahan) “adalah mungkin untuk hard-fail jika Anda situs ever memiliki sebuah error di -nya TLS configuration.” Tidak click-melalui — sebuah lapsed cert becomes sebuah outage. Sumber
- HTTPS itself adalah “a very lightweight signal—affecting fewer than 1% of global queries.” (terjemahan) “sinyal yang sangat ringan—memengaruhi kurang dari 1% kueri global.” Google’s own framing — dan HSTS adalah sebuah layer pada top dari HTTPS, tidak sebuah terpisah peringkat input, so -nya SEO weight adalah effectively zero. Right-size expectations accordingly. Sumber
Uji pemahaman Anda: HSTS
Five quick pertanyaan pada HSTS. Pick sebuah jawaban untuk setiap, lalu periksa.
Log perubahan
Diperbarui 10 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 17 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.