{"id":15714,"date":"2026-09-06T10:29:27","date_gmt":"2026-09-06T08:29:27","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/hsts-preload-readiness-checker\/"},"modified":"2026-09-06T10:29:27","modified_gmt":"2026-09-06T08:29:27","slug":"hsts-preload-readiness-checker","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/","title":{"rendered":"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">HSTS m\u00f3wi przegl\u0105darce, \u017ce dla tego hosta ma odt\u0105d u\u017cywa\u0107 https, a lista preload umieszcza t\u0119 instrukcj\u0119 w przegl\u0105darce jeszcze przed pierwsz\u0105 wizyt\u0105. Jedno i drugie zale\u017cy od szczeg\u00f3\u0142\u00f3w, kt\u00f3re \u0142atwo zrobi\u0107 prawie dobrze: nag\u0142\u00f3wek musi pojawi\u0107 si\u0119 na go\u0142ej domenie po https, nie\u015b\u0107 co najmniej rok, obejmowa\u0107 poddomeny, wymienia\u0107 preload \u2014 a pierwsze przekierowanie z http musi zosta\u0107 na tym samym ho\u015bcie. Ta kontrola pyta cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"hsts-domain\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Domena<\/label><br \/>\n        <input id=\"hsts-domain\" type=\"text\" value=\"lukaswojcik.com\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace;\">\n    <\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Z tego serwera: cztery zapytania HEAD, po jednym na adres. Przekierowania nie s\u0105 \u015bledzone, tre\u015b\u0107 strony nie jest pobierana, \u017cadne ciasteczka nie s\u0105 wysy\u0142ane, nic nie jest zapisywane poza stanem licznika.<\/p>\n<p>    <button id=\"hsts-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Sprawd\u017a HSTS<\/button><\/p>\n<div id=\"hsts-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Granice, kt\u00f3re warto zna\u0107: sprawdzane s\u0105 warunki, nie sama lista \u2014 na to, czy domena ju\u017c figuruje na li\u015bcie preload, odpowie tylko lista. Poddomeny r\u00f3wnie\u017c nie s\u0105 wyliczane, wi\u0119c includeSubDomains czyta si\u0119 jako zapowied\u017a, a nie jako fakt zweryfikowany na ka\u017cdym ho\u015bcie.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"HSTS m\u00f3wi przegl\u0105darce, \u017ce dla tego hosta ma odt\u0105d u\u017cywa\u0107 https, a lista preload umieszcza t\u0119 instrukcj\u0119 w przegl\u0105darce jeszcze przed pierwsz\u0105 wizyt\u0105. Jedno i drugie zale\u017cy od szczeg\u00f3\u0142\u00f3w, kt\u00f3re \u0142atwo zrobi\u0107 prawie dobrze: nag\u0142\u00f3wek musi pojawi\u0107 si\u0119 na go\u0142ej domenie po https, nie\u015b\u0107 co najmniej rok, obejmowa\u0107 poddomeny, wymienia\u0107 preload \u2014 a pierwsze przekierowanie z http musi zosta\u0107 na tym samym ho\u015bcie. Ta kontrola pyta cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105.\",\"label_domain\":\"Domena\",\"datenschutz\":\"Z tego serwera: cztery zapytania HEAD, po jednym na adres. Przekierowania nie s\u0105 \u015bledzone, tre\u015b\u0107 strony nie jest pobierana, \u017cadne ciasteczka nie s\u0105 wysy\u0142ane, nic nie jest zapisywane poza stanem licznika.\",\"knopf\":\"Sprawd\u017a HSTS\",\"laeuft\":\"Pytanie czterech adres\u00f3w...\",\"grenze\":\"Granice, kt\u00f3re warto zna\u0107: sprawdzane s\u0105 warunki, nie sama lista \u2014 na to, czy domena ju\u017c figuruje na li\u015bcie preload, odpowie tylko lista. Poddomeny r\u00f3wnie\u017c nie s\u0105 wyliczane, wi\u0119c includeSubDomains czyta si\u0119 jako zapowied\u017a, a nie jako fakt zweryfikowany na ka\u017cdym ho\u015bcie.\",\"h_proben\":\"Cztery adresy\",\"tabelle_hinweis\":\"Przekierowania s\u0105 odnotowywane, nie \u015bledzone. Nag\u0142\u00f3wek liczy si\u0119 tylko wtedy, gdy przychodzi po https; w odpowiedzi http przegl\u0105darki ignoruj\u0105 Strict-Transport-Security ca\u0142kowicie.\",\"h_befunde\":\"Ustalenia\",\"sp_adresse\":\"Adres\",\"sp_status\":\"Status\",\"sp_ziel\":\"Przekierowanie do\",\"sp_hsts\":\"Strict-Transport-Security\",\"art_http_apex\":\"http, go\u0142a\",\"art_http_www\":\"http, www\",\"art_https_apex\":\"https, go\u0142a\",\"art_https_www\":\"https, www\",\"zeile_domain\":\"Domena\",\"zeile_reif\":\"Warunki preload\",\"zeile_dauer\":\"Czas\",\"zeile_limit\":\"Pozosta\u0142e kontrole w tej godzinie\",\"wert_reif\":\"wszystkie spe\u0142nione\",\"wert_nicht_reif\":\"nie wszystkie spe\u0142nione\",\"wert_keine\":\"brak\",\"wert_ja\":\"tak\",\"wert_nein\":\"nie\",\"stufe_hoch\":\"Wysoki\",\"stufe_mittel\":\"\u015aredni\",\"stufe_niedrig\":\"Niski\",\"stufe_info\":\"Informacja\",\"stufe_gut\":\"W porz\u0105dku\",\"keine_befunde\":\"Nie ma nic do zg\u0142oszenia.\",\"urteil_gut\":\"HTTPS jest egzekwowane poprawnie.\",\"urteil_warnung\":\"HTTPS dzia\u0142a, ale egzekwowanie ma luki.\",\"urteil_kritisch\":\"Domena jest nadal osi\u0105galna bez ochrony przez http albo https w og\u00f3le nie odpowiada.\",\"fehler_kein_token\":\"Kontrola nie mog\u0142a ruszy\u0107, poniewa\u017c reCAPTCHA si\u0119 nie wczyta\u0142a.\",\"fehler_captcha\":\"reCAPTCHA uzna\u0142a zapytanie za zautomatyzowane. Zwykle pomaga ponowne wczytanie strony.\",\"fehler_zu_viele\":\"Limit {limit} kontroli na godzin\u0119 dla tego adresu zosta\u0142 osi\u0105gni\u0119ty.\",\"fehler_adresse\":\"Tej domeny nie da si\u0119 u\u017cy\u0107.\",\"fehler_domain\":\"Tej domeny nie da si\u0119 u\u017cy\u0107.\",\"fehler_zaehler\":\"Licznik jest niedost\u0119pny, dlatego nic nie zosta\u0142o sprawdzone.\",\"fehler_pruefdienst\":\"Us\u0142uga reCAPTCHA by\u0142a nieosi\u0105galna.\",\"fehler_aufbau\":\"Us\u0142uga nie jest poprawnie skonfigurowana. B\u0142\u0105d le\u017cy po tej stronie.\",\"fehler_eingabe\":\"Zapytania nie da\u0142o si\u0119 odczyta\u0107.\",\"fehler_methode\":\"Niew\u0142a\u015bciwa metoda zapytania.\",\"fehler_netz\":\"Us\u0142uga by\u0142a nieosi\u0105galna.\",\"fehler_antwort\":\"Odpowiedzi nie da\u0142o si\u0119 odczyta\u0107.\",\"fehler_unbekannt\":\"Co\u015b posz\u0142o nie tak i nie ma na to osobnego komunikatu.\",\"grund_leer\":\"Nic nie zosta\u0142o wpisane.\",\"grund_zu_lang\":\"Wpis jest za d\u0142ugi.\",\"grund_unlesbar\":\"To nie uk\u0142ada si\u0119 w nazw\u0119 domeny.\",\"grund_kein_punkt\":\"Domena potrzebuje co najmniej jednej kropki.\",\"grund_hostform\":\"Oczekiwana jest nazwa domeny, nie adres IP.\",\"befund_kein_https\":\"Go\u0142a domena nie odpowiada po https || Pow\u00f3d: {grund}. Wszystko inne od tego zale\u017cy: bez odpowiedzi https na go\u0142ej nazwie nie ma czego egzekwowa\u0107 ani czego wst\u0119pnie \u0142adowa\u0107.\",\"befund_http_stumm\":\"Go\u0142a domena nie odpowiada po http || Pow\u00f3d: {grund}. Samo w sobie to nie wada \u2014 serwer odmawiaj\u0105cy na porcie 80 nie jest te\u017c osi\u0105galny bez ochrony. Lista preload wymaga jednak odpowiedzi http z przekierowaniem.\",\"befund_umleitung_richtig\":\"http na go\u0142ej domenie przekierowuje na https tego samego hosta || Status {status} do {ziel}. Dok\u0142adnie tego pierwszego skoku wymaga lista preload.\",\"befund_umleitung_nicht_dauerhaft\":\"Przekierowanie u\u017cywa statusu {status} zamiast 301 || Dzia\u0142a, ale trwa\u0142a przeprowadzka zas\u0142uguje na trwa\u0142y kod, a niekt\u00f3re roboty wyci\u0105gaj\u0105 z tej r\u00f3\u017cnicy wnioski.\",\"befund_umleitung_bleibt_http\":\"http przekierowuje na kolejny adres http || Cel: {ziel}. Po\u0142\u0105czenie pozostaje nieszyfrowane przez drugi skok \u2014 a w\u0142a\u015bnie tego potrzebuje kto\u015b w tej samej sieci.\",\"befund_umleitung_wechselt_host\":\"http na go\u0142ej domenie skacze od razu na inny host || Cel: {ziel}, oczekiwane najpierw: {erwartet}. To zdecydowanie najcz\u0119stszy pow\u00f3d odrzucenia zg\u0142oszenia do listy preload. Pierwszy skok musi trafi\u0107 na https tej samej nazwy, dopiero drugi mo\u017ce zmieni\u0107 host.\",\"befund_umleitung_unlesbar\":\"Celu przekierowania nie da si\u0119 odczyta\u0107 || Location: {ort}\",\"befund_http_liefert_inhalt\":\"http odpowiada kodem 200 zamiast przekierowa\u0107 || Witryna jest w pe\u0142ni osi\u0105galna bez szyfrowania. Wszystko, co idzie tym po\u0142\u0105czeniem, da si\u0119 po drodze odczyta\u0107 i zmieni\u0107, a wyszukiwarki mog\u0105 dodatkowo zaindeksowa\u0107 wersj\u0119 http.\",\"befund_http_unerwartet\":\"http odpowiada statusem {status} || Ani tre\u015b\u0107, ani przekierowanie. Niezale\u017cnie od powodu nie jest to odpowied\u017a, jakiej oczekuje lista preload.\",\"befund_www_umleitung_bleibt_http\":\"http na www przekierowuje na kolejny adres http || Cel: {ziel}\",\"befund_www_http_liefert_inhalt\":\"www odpowiada po http kodem 200 || Host www jest osi\u0105galny bez szyfrowania, nawet je\u015bli go\u0142a nazwa nie jest.\",\"befund_hsts_ueber_http\":\"Odpowied\u017a http niesie nag\u0142\u00f3wek Strict-Transport-Security || Przegl\u0105darki ca\u0142kowicie go tam ignoruj\u0105. Nic nie kosztuje i niczego nie chroni.\",\"befund_hsts_fehlt\":\"Brak nag\u0142\u00f3wka Strict-Transport-Security || Bez niego pierwsze zapytanie ka\u017cdej wizyty idzie po http i da si\u0119 je przechwyci\u0107, zanim zadzia\u0142a przekierowanie. W\u0142a\u015bnie to okno zamyka nag\u0142\u00f3wek dla wszystkich p\u00f3\u017aniejszych wizyt.\",\"befund_hsts_nur_auf_www\":\"Nag\u0142\u00f3wek stoi tylko na www, nie na go\u0142ej domenie || Go\u0142\u0105 nazw\u0119 wpisuje odwiedzaj\u0105cy i na ni\u0105 patrzy lista preload. Nag\u0142\u00f3wek pojawiaj\u0105cy si\u0119 dopiero po przekierowaniu przychodzi za p\u00f3\u017ano.\",\"befund_hsts_vorhanden\":\"Znaleziony nag\u0142\u00f3wek: {roh} || To warto\u015b\u0107 w postaci dostarczonej.\",\"befund_max_age_fehlt\":\"Nag\u0142\u00f3wek nie niesie max-age || Bez tej warto\u015bci pozostaje ca\u0142kowicie bez efektu; max-age to jedyna cz\u0119\u015b\u0107 obowi\u0105zkowa.\",\"befund_max_age_kurz\":\"max-age wynosi {wert} sekund ({tage} dni) || Lista preload wymaga co najmniej roku. Kr\u00f3tsza warto\u015b\u0107 i tak chroni powracaj\u0105cych odwiedzaj\u0105cych przez ten czas, jest wi\u0119c sensownym krokiem po\u015brednim przy testowaniu.\",\"befund_max_age_gut\":\"max-age obejmuje {tage} dni || Na poziomie roku wymaganego przez list\u0119 preload albo powy\u017cej.\",\"befund_ohne_includesubdomains\":\"Nag\u0142\u00f3wkowi brakuje includeSubDomains || Ka\u017cda poddomena pozostaje wtedy osi\u0105galna po http, tak\u017ce ta, o kt\u00f3rej nikt nie pami\u0119ta. Lista preload tego wymaga, a jest to cz\u0119\u015b\u0107, kt\u00f3ra naj\u0142atwiej co\u015b psuje: ka\u017cda poddomena bez wa\u017cnego certyfikatu staje si\u0119 nieosi\u0105galna.\",\"befund_mit_includesubdomains\":\"Nag\u0142\u00f3wek niesie includeSubDomains || Ka\u017cda poddomena jest obj\u0119ta.\",\"befund_ohne_preload_kennzeichen\":\"Nag\u0142\u00f3wkowi brakuje s\u0142owa preload || To s\u0142owo jest zgod\u0105 operatora na wpis. Bez niego zg\u0142oszenie zostaje odrzucone, nawet gdy ca\u0142a reszta si\u0119 zgadza.\",\"befund_mit_preload_kennzeichen\":\"Nag\u0142\u00f3wek niesie s\u0142owo preload || Zgoda na wpis jest wyra\u017cona.\",\"befund_preload_reif\":\"Wszystkie warunki listy preload s\u0105 spe\u0142nione || {domain} przekierowuje poprawnie i wysy\u0142a nag\u0142\u00f3wek z rokiem, includeSubDomains oraz preload. To, czy domena ju\u017c figuruje na li\u015bcie, jest osobnym pytaniem, na kt\u00f3re ta kontrola nie odpowiada.\",\"befund_preload_nicht_reif\":\"Nie wszystkie warunki preload s\u0105 spe\u0142nione || Czego brakuje, wynika z ustale\u0144 powy\u017cej. Samo HSTS mo\u017ce mimo to dzia\u0142a\u0107 \u2014 lista jest surowsza ni\u017c nag\u0142\u00f3wek.\",\"befund_preload_versprochen_nicht_erfuellt\":\"Nag\u0142\u00f3wek wymienia preload, ale warunki nie s\u0105 spe\u0142nione || Przegl\u0105darki pomijaj\u0105 t\u0119 sprzeczno\u015b\u0107, wi\u0119c nic si\u0119 nie psuje. Zg\u0142oszenie zosta\u0142oby odrzucone, a s\u0142owo sugeruje ochron\u0119, kt\u00f3rej nie ma.\",\"befund_www_ohne_hsts\":\"Host www nie wysy\u0142a w\u0142asnego nag\u0142\u00f3wka HSTS || Przy includeSubDomains na go\u0142ej domenie i tak jest obj\u0119ty. Bez tego www pozostaje bez ochrony.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-hstscheck.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];<\/p>\n<p>    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }\n    function zeichen(w) { return (typeof w === 'string' && w !== '') ? w : null; }\n    function text(schluessel, daten) {\n        var t = T[schluessel];\n        if (typeof t !== 'string') { return null; }\n        return t.replace(\/\\{([a-z_0-9]+)\\}\/g, function (m, k) {\n            var w = (daten && daten[k] !== undefined && daten[k] !== null) ? daten[k] : null;\n            if (w === null) { return m; }\n            if (k === 'art' && T['art_' + w]) { return T['art_' + w]; }\n            return String(w);\n        });\n    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: String(a.fehler), grund: a.grund || null, limit: zahl(a.limit) }; }\n        var befunde = liste(a.befunde).map(function (f) {\n            return { key: String(f.key || ''), stufe: STUFEN.indexOf(f.stufe) === -1 ? 'info' : f.stufe, daten: (f.daten && typeof f.daten === 'object') ? f.daten : {} };\n        });\n        var gruppen = {};\n        STUFEN.forEach(function (s) { gruppen[s] = befunde.filter(function (f) { return f.stufe === s; }); });\n        var proben = liste(a.proben).map(function (z) {\n            return { art: String(z.art || ''), url: String(z.url || ''), status: zahl(z.status),\n                ort: zeichen(z.ort), hsts: zeichen(z.hsts), maxAge: zahl(z.max_age) };\n        });\n        return {\n            fehler: null, domain: String(a.domain || ''),\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            reif: a.reif === true, proben: proben,\n            befunde: befunde, gruppen: gruppen, dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }<\/p>\n<p>    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); }; s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'hstscheck' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(domain) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ domain: domain, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.HSTS = { bewerten: bewerten, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, T: T };<\/p>\n<p>    var btn = document.getElementById('hsts-btn');\n    var out = document.getElementById('hsts-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, txt) { var e = document.createElement(tag); if (stil) { e.setAttribute('style', stil); } if (txt !== undefined && txt !== null) { e.textContent = txt; } return e; }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.95rem; margin: 22px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace; word-break: break-all;';\n    var KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 8px; padding: 14px 16px; margin: 0 0 10px;';\n    var GUT = ' color: #7ee787;', WARN = ' color: #ffa94d;', ROT = ' color: #ff7b72;', GRAU = ' color: #8a8a99;';\n    var FARBEN = { hoch: '#ff7b72', mittel: '#ffa94d', niedrig: '#e3b341', info: '#8a8a99', gut: '#7ee787' };\n    var URTEIL = { gut: GUT, warnung: WARN, kritisch: ROT };\n    function gitter(sp) { return el('div', 'display: grid; grid-template-columns: ' + sp + '; gap: 0 18px; align-items: baseline;'); }\n    function paar(g, n, w, stil) { g.appendChild(el('div', ZELLE, n)); g.appendChild(el('div', ZELLE_WERT + (stil || ''), w)); }<\/p>\n<p>    function tabelle(b) {\n        var huelle = el('div', 'overflow-x: auto; margin: 0 0 6px;');\n        var t = el('table', 'border-collapse: collapse; width: 100%; min-width: 640px; font-size: 0.84rem;');\n        var kopf = el('tr', '');\n        [T.sp_adresse, T.sp_status, T.sp_ziel, T.sp_hsts].forEach(function (n) {\n            kopf.appendChild(el('th', 'text-align: left; padding: 6px 12px 6px 0; color: #8a8a99; font-weight: 700; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border, #2a2a35); white-space: nowrap;', n));\n        });\n        t.appendChild(kopf);\n        b.proben.forEach(function (z) {\n            var r = el('tr', '');\n            function zelle(txt, stil) { r.appendChild(el('td', 'padding: 7px 12px 7px 0; border-bottom: 1px solid var(--border, #2a2a35); font-family: monospace; color: var(--text-primary, #e8e8ee);' + (stil || ''), txt)); }\n            zelle(T['art_' + z.art] || z.art);\n            zelle(z.status !== null ? String(z.status) : T.wert_keine, (z.status === 200 || (z.status >= 300 && z.status < 400)) ? GRAU : ROT);\n            zelle(z.ort ? String(z.ort).replace(\/^https?:\\\/\\\/\/, '') : '-', GRAU);\n            zelle(z.hsts || '-', z.hsts ? GUT : GRAU);\n            t.appendChild(r);\n        });\n        huelle.appendChild(t);\n        return huelle;\n    }\n\n    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var txt = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund &#038;&#038; T['grund_' + b.grund]) { txt = txt + ' ' + T['grund_' + b.grund]; }\n            if (b.limit !== null) { txt = txt.replace('{limit}', String(b.limit)); }\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', txt));\n            return;\n        }\n        ziel.appendChild(el('div', 'font-size: 1.05rem; font-weight: 700; margin: 0 0 12px;' + URTEIL[b.urteil], T['urteil_' + b.urteil]));\n\n        var g = gitter('auto auto');\n        paar(g, T.zeile_domain, b.domain, GRAU);\n        paar(g, T.zeile_reif, b.reif ? T.wert_reif : T.wert_nicht_reif, b.reif ? GUT : WARN);\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        if (b.limitRest !== null) { paar(g, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(g);\n\n        if (b.proben.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_proben));\n            ziel.appendChild(tabelle(b));\n            ziel.appendChild(el('p', ZELLE + ' margin: 0 0 6px; font-size: 0.8rem;', T.tabelle_hinweis));\n        }\n\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        var irgendwas = false;\n        STUFEN.forEach(function (s) {\n            var gr = b.gruppen[s];\n            if (!gr.length) { return; }\n            irgendwas = true;\n            ziel.appendChild(el('div', 'font-weight: 700; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.5px; margin: 14px 0 6px; color: ' + FARBEN[s] + ';', T['stufe_' + s] + ' (' + gr.length + ')'));\n            gr.forEach(function (f) {\n                var k = el('div', KASTEN + ' border-left: 3px solid ' + FARBEN[s] + ';');\n                var t = text('befund_' + f.key, f.daten) || f.key;\n                var teile = t.split(' || ');\n                k.appendChild(el('div', 'color: var(--text-primary, #e8e8ee); font-size: 0.9rem; font-weight: 700;', teile[0]));\n                if (teile[1]) { k.appendChild(el('div', ZELLE + ' padding: 6px 0 0; line-height: 1.55;', teile[1])); }\n                ziel.appendChild(k);\n            });\n        });\n        if (!irgendwas) { ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.keine_befunde)); }\n    }\n    window.LW_TEST.HSTS.darstellen = darstellen;\n\n    var laeuft = false;\n    btn.addEventListener('click', function () {\n        if (laeuft) { return; }\n        laeuft = true; btn.disabled = true;\n        out.innerHTML = '';\n        out.appendChild(el('p', ZELLE + GRAU + ' margin: 0;', T.laeuft));\n        abfragen(wert('hsts-domain')).then(function (a) { darstellen(bewerten(a), out); laeuft = false; btn.disabled = false; },\n            function () { darstellen(bewerten({ fehler: 'netz' }), out); laeuft = false; btn.disabled = false; });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Narz\u0119dzie ogl\u0105da http i https, ka\u017cdorazowo z www i bez, i czyta wy\u0142\u0105cznie wiersz statusu, cel przekierowania oraz nag\u0142\u00f3wek Strict-Transport-Security. Przekierowania \u015bwiadomie nie s\u0105 \u015bledzone, bo rozstrzyga pierwszy skok: przej\u015bcie z http:\/\/przyklad.pl wprost na https:\/\/www.przyklad.pl wyklucza domen\u0119 z listy preload i jest najcz\u0119stszym powodem odrzucenia zg\u0142oszenia.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92151,92774,92762],"class_list":["post-15714","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-pl","tag-it-networks-pl","tag-web-development-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Narz\u0119dzie ogl\u0105da http i https, ka\u017cdorazowo z www i bez, i czyta wy\u0142\u0105cznie wiersz statusu, cel przekierowania oraz nag\u0142\u00f3wek Strict-Transport-Security. Przekierowania \u015bwiadomie nie s\u0105 \u015bledzone, bo rozstrzyga pierwszy skok: przej\u015bcie z http:\/\/przyklad.pl wprost na https:\/\/www.przyklad.pl wyklucza domen\u0119 z listy preload i jest najcz\u0119stszym powodem odrzucenia zg\u0142oszenia.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/hsts-preload-readiness-checker\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/hsts-preload-readiness-checker\\\/\",\"name\":\"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-06T08:29:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/hsts-preload-readiness-checker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/hsts-preload-readiness-checker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/hsts-preload-readiness-checker\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/","og_locale":"en_US","og_type":"article","og_title":"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog","og_description":"Narz\u0119dzie ogl\u0105da http i https, ka\u017cdorazowo z www i bez, i czyta wy\u0142\u0105cznie wiersz statusu, cel przekierowania oraz nag\u0142\u00f3wek Strict-Transport-Security. Przekierowania \u015bwiadomie nie s\u0105 \u015bledzone, bo rozstrzyga pierwszy skok: przej\u015bcie z http:\/\/przyklad.pl wprost na https:\/\/www.przyklad.pl wyklucza domen\u0119 z listy preload i jest najcz\u0119stszym powodem odrzucenia zg\u0142oszenia.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/","name":"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105 - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-06T08:29:27+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/hsts-preload-readiness-checker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Kontrola gotowo\u015bci HSTS i preload: cztery adresy, kt\u00f3re o tym rozstrzygaj\u0105"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=15714"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15714\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15714"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}