{"id":15563,"date":"2026-09-05T14:19:46","date_gmt":"2026-09-05T12:19:46","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/connection-mirror-what-the-server-sees\/"},"modified":"2026-09-05T14:19:46","modified_gmt":"2026-09-05T12:19:46","slug":"connection-mirror-what-the-server-sees","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/","title":{"rendered":"Lustro po\u0142\u0105czenia: co widzi serwer"},"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;\">Ka\u017cde \u017c\u0105danie niesie wi\u0119cej ni\u017c adres strony. Zanim uruchomi si\u0119 cho\u0107 jedna linia JavaScriptu, serwer zna adres IP i czyja to sie\u0107, jak\u0105 wersj\u0119 TLS i szyfr wynegocjowano, jakie j\u0119zyki preferuje przegl\u0105darka, czy wysy\u0142a sygna\u0142 Global Privacy Control i, w Chromium, Client Hints, kt\u00f3re zast\u0105pi\u0142y ci\u0105g User-Agent. To narz\u0119dzie prosi ten serwer, by dok\u0142adnie to zg\u0142osi\u0142 dla bie\u017c\u0105cego po\u0142\u0105czenia, i zestawia to z tym, co przegl\u0105darka m\u00f3wi o sobie. Tam, gdzie oba si\u0119 r\u00f3\u017cni\u0105, zwykle po\u015bredniczy rozszerzenie, proxy albo VPN.<\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">\u017b\u0105danie trafia wy\u0142\u0105cznie do tego serwera; nic nie jest zapisywane poza godzinowym licznikiem, a odpowied\u017a pojawia si\u0119 tylko tutaj. Warto\u015bci cookie i nag\u0142\u00f3wki autoryzacji nigdy nie s\u0105 zwracane, tylko nazwy cookie. Zapytanie reverse DNS i jedno zapytanie RDAP o w\u0142a\u015bciciela sieci dzia\u0142aj\u0105 na tym serwerze.<\/p>\n<p>    <button id=\"mi-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;\">Poka\u017c, co widzi ten serwer<\/button><\/p>\n<div id=\"mi-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Granice, o kt\u00f3rych warto wiedzie\u0107: pokazywane nag\u0142\u00f3wki pochodz\u0105 z \u017c\u0105dania w tle (fetch), kt\u00f3re niesie mniej warto\u015bci Sec-Fetch i Accept ni\u017c nawigacja do strony; wersja HTTP to ta, kt\u00f3r\u0105 negocjuje ten serwer, a nie najlepsza mo\u017cliwa dla przegl\u0105darki; w\u0142a\u015bciciel sieci pochodzi z regionalnego rejestru i nazywa dostawc\u0119, nie osob\u0119; a wskaz\u00f3wka o hostingu to heurystyka na nazwie sieci.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Ka\u017cde \u017c\u0105danie niesie wi\u0119cej ni\u017c adres strony. Zanim uruchomi si\u0119 cho\u0107 jedna linia JavaScriptu, serwer zna adres IP i czyja to sie\u0107, jak\u0105 wersj\u0119 TLS i szyfr wynegocjowano, jakie j\u0119zyki preferuje przegl\u0105darka, czy wysy\u0142a sygna\u0142 Global Privacy Control i, w Chromium, Client Hints, kt\u00f3re zast\u0105pi\u0142y ci\u0105g User-Agent. To narz\u0119dzie prosi ten serwer, by dok\u0142adnie to zg\u0142osi\u0142 dla bie\u017c\u0105cego po\u0142\u0105czenia, i zestawia to z tym, co przegl\u0105darka m\u00f3wi o sobie. Tam, gdzie oba si\u0119 r\u00f3\u017cni\u0105, zwykle po\u015bredniczy rozszerzenie, proxy albo VPN.\",\"datenschutz\":\"\u017b\u0105danie trafia wy\u0142\u0105cznie do tego serwera; nic nie jest zapisywane poza godzinowym licznikiem, a odpowied\u017a pojawia si\u0119 tylko tutaj. Warto\u015bci cookie i nag\u0142\u00f3wki autoryzacji nigdy nie s\u0105 zwracane, tylko nazwy cookie. Zapytanie reverse DNS i jedno zapytanie RDAP o w\u0142a\u015bciciela sieci dzia\u0142aj\u0105 na tym serwerze.\",\"knopf\":\"Poka\u017c, co widzi ten serwer\",\"laeuft\":\"Pytanie serwera...\",\"grenze\":\"Granice, o kt\u00f3rych warto wiedzie\u0107: pokazywane nag\u0142\u00f3wki pochodz\u0105 z \u017c\u0105dania w tle (fetch), kt\u00f3re niesie mniej warto\u015bci Sec-Fetch i Accept ni\u017c nawigacja do strony; wersja HTTP to ta, kt\u00f3r\u0105 negocjuje ten serwer, a nie najlepsza mo\u017cliwa dla przegl\u0105darki; w\u0142a\u015bciciel sieci pochodzi z regionalnego rejestru i nazywa dostawc\u0119, nie osob\u0119; a wskaz\u00f3wka o hostingu to heurystyka na nazwie sieci.\",\"h_verbindung\":\"Po\u0142\u0105czenie\",\"zeile_ip\":\"Adres\",\"zeile_port\":\"port\",\"zeile_ptr\":\"Reverse DNS\",\"zeile_netz\":\"Sie\u0107\",\"zeile_tls\":\"TLS\",\"zeile_http\":\"Wersja HTTP\",\"zeile_cookies\":\"Wys\u0142ane cookie (nazwy)\",\"zeile_dauer\":\"Czas\",\"zeile_limit\":\"Pozosta\u0142e wywo\u0142ania w tej godzinie\",\"familie_4\":\"IPv4\",\"familie_6\":\"IPv6\",\"wert_keiner\":\"brak\",\"h_kopf\":\"Nag\u0142\u00f3wki \u017c\u0105dania, jak odebrane ({n})\",\"h_vergleich\":\"Serwer kontra przegl\u0105darka\",\"spalte_merkmal\":\"Cecha\",\"server_sieht\":\"Serwer widzi\",\"browser_sagt\":\"Przegl\u0105darka m\u00f3wi\",\"gleich\":\"zgodne\",\"verschieden\":\"r\u00f3\u017cne\",\"v_sprache\":\"Preferowany j\u0119zyk\",\"v_gpc\":\"Global Privacy Control\",\"v_ua\":\"User-Agent\",\"v_zeitzone\":\"Kraj sieci \\\/ strefa czasowa\",\"v_plattform\":\"Platforma\",\"ja\":\"tak\",\"nein\":\"nie\",\"h_befunde\":\"Ustalenia\",\"stufe_hoch\":\"Wysoka\",\"stufe_mittel\":\"\u015arednia\",\"stufe_niedrig\":\"Niska\",\"stufe_info\":\"Informacja\",\"stufe_gut\":\"W porz\u0105dku\",\"keine_befunde\":\"Brak uwag.\",\"fehler_zu_viele\":\"Osi\u0105gni\u0119to limit {limit} wywo\u0142a\u0144 na godzin\u0119 dla tego adresu.\",\"fehler_zaehler\":\"Licznik jest niedost\u0119pny, dlatego nic nie zosta\u0142o sprawdzone.\",\"fehler_methode\":\"Niew\u0142a\u015bciwa metoda \u017c\u0105dania.\",\"fehler_netz\":\"Us\u0142uga by\u0142a nieosi\u0105galna.\",\"fehler_antwort\":\"Odpowied\u017a by\u0142a nieczytelna.\",\"fehler_unbekannt\":\"Co\u015b posz\u0142o nie tak, a nie ma na to osobnego komunikatu.\",\"befund_ipv6\":\"Po\u0142\u0105czenie przez IPv6: {ip} || Adres pochodzi z przydzia\u0142u IPv6 dostawcy. Wielu dostawc\u00f3w regularnie przydziela nowy prefiks; cz\u0119\u015b\u0107 interfejsowa mo\u017ce mimo to d\u0142ugo pozostawa\u0107 sta\u0142a.\",\"befund_ipv4\":\"Po\u0142\u0105czenie przez IPv4: {ip} || Albo dostawca nie ma jeszcze IPv6, albo przegl\u0105darka wybra\u0142a IPv4 dla tego hosta. Za NAT operatorskim wielu klient\u00f3w dzieli jeden taki adres.\",\"befund_adresse_unbekannt\":\"Brak czytelnego adresu klienta || Serwer nie zobaczy\u0142 u\u017cytecznego adresu zdalnego, co wskazuje na \u017ale skonfigurowane proxy.\",\"befund_adresse_privat\":\"Adres jest prywatny: {ip} || \u017b\u0105danie dotar\u0142o do tego serwera z sieci lokalnej albo przez proxy ukrywaj\u0105ce pochodzenie. Dla adres\u00f3w prywatnych pomijane s\u0105 reverse DNS i zapytanie o sie\u0107.\",\"befund_ptr\":\"Reverse DNS: {ptr} || Nazwa dostawcy dla tego adresu. Cz\u0119sto zdradza dostawc\u0119, region i to, czy \u0142\u0105cze jest domowe czy firmowe, a widzi j\u0105 ka\u017cda strona.\",\"befund_ptr_fehlt\":\"Brak nazwy reverse DNS || Dostawca nie ustawi\u0142 rekordu PTR dla tego adresu. Nic w tym z\u0142ego; strony maj\u0105 po prostu jedn\u0105 wskaz\u00f3wk\u0119 mniej.\",\"befund_netz\":\"Sie\u0107: {name}, {org} ({land}) || Komu przydzielono adres, z regionalnego rejestru. To zgrubna lokalizacja, kt\u00f3r\u0105 ka\u017cda strona mo\u017ce wywie\u015b\u0107 z samego adresu.\",\"befund_rechenzentrum\":\"Sie\u0107 nale\u017cy do dostawcy hostingu lub chmury: {anbieter} || Typowe dla VPN, proxy albo zautomatyzowanego klienta. Strony oceniaj\u0105ce odwiedzaj\u0105cych traktuj\u0105 takie adresy inaczej ni\u017c domowe.\",\"befund_proxy_kopf\":\"Obecny nag\u0142\u00f3wek proxy: {wert} || Nag\u0142\u00f3wek Via, Forwarded lub X-Forwarded-For m\u00f3wi, \u017ce co\u015b mi\u0119dzy przegl\u0105dark\u0105 a serwerem przepisa\u0142o \u017c\u0105danie. Cokolwiek w nim jest, doda\u0142 ten w\u0119ze\u0142, nie przegl\u0105darka.\",\"befund_tls13\":\"TLS 1.3 z {cipher} || Aktualna wersja: uzgadnianie w jednej rundzie, tylko forward secrecy, a certyfikat serwera jest zaszyfrowany na \u0142\u0105czu.\",\"befund_tls12\":\"TLS 1.2 z {cipher} || Nadal w porz\u0105dku, ale przegl\u0105darka albo w\u0119ze\u0142 po\u015bredni nie wynegocjowa\u0142y 1.3. Aktualne przegl\u0105darki to robi\u0105; firmowe proxy inspekcyjne cz\u0119sto zostaje przy 1.2.\",\"befund_tls_alt\":\"Stara wersja TLS: {protokoll} || TLS 1.0 i 1.1 s\u0105 wycofane, aktualne przegl\u0105darki ich odmawiaj\u0105. Co\u015b starego jest pomi\u0119dzy.\",\"befund_kein_tls\":\"Brak TLS || \u017b\u0105danie przysz\u0142o jawnym tekstem. Wszystko na tej stronie, \u0142\u0105cznie z nag\u0142\u00f3wkami, by\u0142o po drodze czytelne.\",\"befund_tls_unbekannt\":\"Szczeg\u00f3\u0142y TLS nie wyeksportowane || Po\u0142\u0105czenie jest szyfrowane, ale serwer nie wyeksportowa\u0142 szczeg\u00f3\u0142\u00f3w protoko\u0142u dla tego \u017c\u0105dania.\",\"befund_http_version\":\"Wersja HTTP {version} || Wersja, kt\u00f3r\u0105 ten serwer wynegocjowa\u0142 dla tego \u017c\u0105dania. Zale\u017cy od tego, co oferuje ten serwer, nie tylko od przegl\u0105darki.\",\"befund_gpc\":\"Global Privacy Control jest ustawione (Sec-GPC: 1) || Przegl\u0105darka lub rozszerzenie prosi, by nie sprzedawa\u0107 ani nie udost\u0119pnia\u0107 danych osobowych. Wed\u0142ug prawa Kalifornii i Kolorado strony musz\u0105 to honorowa\u0107; w UE to sygna\u0142 bez definicji prawnej, ale wyra\u017ana deklaracja woli.\",\"befund_gpc_fehlt\":\"Brak sygna\u0142u Global Privacy Control || Przegl\u0105darka nie wysy\u0142a nag\u0142\u00f3wka Sec-GPC. Firefox i Brave potrafi\u0105 go wysy\u0142a\u0107, Chrome nie; dodaj\u0105 go rozszerzenia takie jak Privacy Badger.\",\"befund_dnt\":\"Do Not Track: {wert} || Stary sygna\u0142 sprzeciwu. Nigdy prawnie wi\u0105\u017c\u0105cy, ignorowany przez wi\u0119kszo\u015b\u0107 stron, usuni\u0119ty z Firefoksa w 2024. Wysy\u0142anie go i tak dodaje bit do odcisku palca.\",\"befund_save_data\":\"Save-Data: {wert} || Przegl\u0105darka prosi o oszcz\u0119dne u\u017cycie danych, zwykle bo w\u0142\u0105czony jest tryb oszcz\u0119dzania. Strony mog\u0105 podawa\u0107 mniejsze obrazy i mniej skrypt\u00f3w.\",\"befund_ua_fehlt\":\"Brak nag\u0142\u00f3wka User-Agent || Nietypowe dla przegl\u0105darki; zautomatyzowani klienci czasem nie wysy\u0142aj\u0105 \u017cadnego.\",\"befund_ua\":\"User-Agent: {ua} || Ci\u0105g, kt\u00f3ry dostaje ka\u017cda strona. W Chromium jest zamro\u017cony (zredukowany), wi\u0119c nie zdradza ju\u017c dok\u0142adnej wersji ani modelu urz\u0105dzenia.\",\"befund_ua_reduziert\":\"Zredukowany ci\u0105g User-Agent || Wersja brzmi x.0.0.0, a platforma jest og\u00f3lna: redukcja User-Agent w Chromium. Dok\u0142adne warto\u015bci przenios\u0142y si\u0119 do Client Hints, o kt\u00f3re strona musi poprosi\u0107.\",\"befund_ua_automat\":\"User-Agent wygl\u0105da na zautomatyzowany || Nazwy takie jak bot, curl czy HeadlessChrome oznaczaj\u0105 klienta jako skrypt lub crawler.\",\"befund_client_hints\":\"Client Hints: {ua}, platforma {plattform}, mobilny {mobil} || Chromium wysy\u0142a mark\u0119 przegl\u0105darki, wersj\u0119 g\u0142\u00f3wn\u0105, platform\u0119 i flag\u0119 mobiln\u0105 bez pytania. Wszystko ponad to (architektura, model, pe\u0142na wersja) dopiero po tym, jak strona poprosi przez Accept-CH.\",\"befund_client_hints_hoch\":\"Client Hints o wysokiej entropii wys\u0142ane bez pytania: {liste} || Te maj\u0105 by\u0107 wysy\u0142ane tylko na pro\u015bb\u0119 strony. Wida\u0107 je tutaj, wi\u0119c przegl\u0105darka lub rozszerzenie wysy\u0142a je domy\u015blnie, co powi\u0119ksza odcisk palca.\",\"befund_client_hints_fehlen\":\"Brak Client Hints || Firefox i Safari nie wysy\u0142aj\u0105 nag\u0142\u00f3wk\u00f3w Sec-CH-UA; ci\u0105g User-Agent to wszystko, co strona dostaje przed uruchomieniem skrypt\u00f3w.\",\"befund_fetch_metadaten\":\"Metadane fetch: site {site}, mode {mode}, dest {dest} || Przegl\u0105darka m\u00f3wi serwerowi, sk\u0105d pochodzi \u017c\u0105danie i do czego s\u0142u\u017cy. Serwery u\u017cywaj\u0105 tego, by odrzuca\u0107 \u017c\u0105dania mi\u0119dzy witrynami, zanim powstanie tre\u015b\u0107.\",\"befund_sprache\":\"Preferowane j\u0119zyki: {liste} || Nag\u0142\u00f3wek Accept-Language, w kolejno\u015bci. Strony wybieraj\u0105 z niego j\u0119zyk; to zarazem jeden z najbardziej identyfikuj\u0105cych nag\u0142\u00f3wk\u00f3w, zw\u0142aszcza z kilkoma wpisami.\",\"befund_sprache_viele\":\"Wymieniono {n} j\u0119zyk\u00f3w || D\u0142uga lista Accept-Language jest rzadka i dlatego identyfikuj\u0105ca. Dwa wpisy to norma; pi\u0119\u0107 to odcisk palca.\",\"befund_sprache_fehlt\":\"Brak nag\u0142\u00f3wka Accept-Language || Nietypowe dla przegl\u0105darki.\",\"befund_kodierung\":\"Akceptowane kodowania: {liste} (Brotli {br}, zstd {zstd}) || Kt\u00f3re kompresje przegl\u0105darka potrafi rozpakowa\u0107. Ka\u017cda aktualna przegl\u0105darka akceptuje Brotli; zstd pojawi\u0142o si\u0119 w Chrome i Firefoksie w 2024.\",\"befund_referer\":\"Referer: {wert} || Strona, z kt\u00f3rej przysz\u0142o to \u017c\u0105danie, na ile pozwala Referrer-Policy.\",\"befund_entropie\":\"{n} nag\u0142\u00f3wk\u00f3w poza User-Agentem niesie identyfikuj\u0105ce szczeg\u00f3\u0142y: {liste} || Zgrubne policzenie tego, co odcisk palca m\u00f3g\u0142by wzi\u0105\u0107 z samych nag\u0142\u00f3wk\u00f3w, zanim uruchomi si\u0119 skrypt.\",\"befund_b_sprache_abweichend\":\"J\u0119zyk si\u0119 r\u00f3\u017cni: serwer widzi {server}, przegl\u0105darka zg\u0142asza {browser} || Accept-Language i navigator.languages zwykle si\u0119 zgadzaj\u0105. R\u00f3\u017cnica wskazuje na rozszerzenie lub proxy przepisuj\u0105ce nag\u0142\u00f3wki albo na ustawienie prywatno\u015bci fa\u0142szuj\u0105ce jedno z nich.\",\"befund_b_gpc_abweichend\":\"GPC si\u0119 r\u00f3\u017cni: nag\u0142\u00f3wek {server}, navigator.globalPrivacyControl {browser} || Nag\u0142\u00f3wek i w\u0142a\u015bciwo\u015b\u0107 JavaScript powinny si\u0119 zgadza\u0107. Je\u015bli ustawione jest tylko jedno, rozszerzenie wstrzykuje nag\u0142\u00f3wek albo przegl\u0105darka pokazuje w\u0142a\u015bciwo\u015b\u0107, nie wysy\u0142aj\u0105c sygna\u0142u.\",\"befund_b_ua_abweichend\":\"Ci\u0105g User-Agent odebrany przez serwer r\u00f3\u017cni si\u0119 od navigator.userAgent || Co\u015b przepisa\u0142o nag\u0142\u00f3wek po drodze albo skrypt nadpisuje w\u0142a\u015bciwo\u015b\u0107. Strony por\u00f3wnuj\u0105ce oba uznaj\u0105 to za maskowanie.\",\"befund_b_zeitzone\":\"Strefa czasowa {zeitzone} nie pasuje do kraju sieci {land} || Zegar przegl\u0105darki jest ustawiony na inny region ni\u017c ten, do kt\u00f3rego nale\u017cy adres. Typowe dla VPN lub w podr\u00f3\u017cy; strony wykrywaj\u0105 u\u017cycie VPN dok\u0142adnie po tej rozbie\u017cno\u015bci.\",\"befund_b_geraet\":\"Urz\u0105dzenie wed\u0142ug przegl\u0105darki: ekran {bildschirm}, wsp\u00f3\u0142czynnik pikseli {dpr}, {kerne} rdzeni, {speicher} pami\u0119ci, sie\u0107 {netz}, cookie {cookies} || Te warto\u015bci s\u0105 dost\u0119pne tylko dla skrypt\u00f3w, nie w nag\u0142\u00f3wkach, i stanowi\u0105 zwyk\u0142y surowiec odcisku palca.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-mirror.php';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];\n    var KOPF_REIHE = ['user-agent', 'accept', 'accept-language', 'accept-encoding', 'sec-ch-ua', 'sec-ch-ua-mobile', 'sec-ch-ua-platform', 'sec-ch-ua-arch', 'sec-ch-ua-model', 'sec-ch-ua-full-version-list', 'sec-ch-ua-platform-version',\n        'sec-fetch-site', 'sec-fetch-mode', 'sec-fetch-dest', 'sec-fetch-user', 'sec-gpc', 'dnt', 'save-data', 'upgrade-insecure-requests', 'priority', 'referer', 'origin', 'host', 'via', 'x-forwarded-for', 'forwarded', 'cache-control', 'pragma', 'te', 'connection', 'device-memory', 'viewport-width', 'downlink', 'ect', 'rtt'];<\/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 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            return (daten && daten[k] !== undefined && daten[k] !== null) ? String(daten[k]) : m;\n        });\n    }<\/p>\n<p>    \/** Was der Browser ueber sich selbst sagt. Jede Sonde einzeln abgesichert. *\/\n    function sammeln(nav, fenster) {\n        nav = nav || navigator; fenster = fenster || window;\n        var r = { ua: null, sprachen: [], gpc: null, dnt: null, zeitzone: null, plattform: null, marken: [], mobil: null, bildschirm: null, dpr: null, kerne: null, speicher: null, cookies: null, netz: null };\n        try { r.ua = String(nav.userAgent || ''); } catch (e) {}\n        try { r.sprachen = liste(nav.languages).map(String); if (!r.sprachen.length && nav.language) { r.sprachen = [String(nav.language)]; } } catch (e) {}\n        try { r.gpc = (typeof nav.globalPrivacyControl === 'boolean') ? nav.globalPrivacyControl : null; } catch (e) {}\n        try { r.dnt = nav.doNotTrack !== undefined ? nav.doNotTrack : null; } catch (e) {}\n        try { r.zeitzone = Intl.DateTimeFormat().resolvedOptions().timeZone || null; } catch (e) {}\n        try { if (nav.userAgentData) { r.plattform = nav.userAgentData.platform || null; r.mobil = !!nav.userAgentData.mobile; r.marken = liste(nav.userAgentData.brands).map(function (b) { return b.brand + ' ' + b.version; }); } } catch (e) {}\n        try { r.bildschirm = fenster.screen ? fenster.screen.width + 'x' + fenster.screen.height : null; r.dpr = fenster.devicePixelRatio || null; } catch (e) {}\n        try { r.kerne = nav.hardwareConcurrency || null; r.speicher = nav.deviceMemory || null; } catch (e) {}\n        try { r.cookies = typeof nav.cookieEnabled === 'boolean' ? nav.cookieEnabled : null; } catch (e) {}\n        try { r.netz = (nav.connection && nav.connection.effectiveType) ? String(nav.connection.effectiveType) : null; } catch (e) {}\n        return r;\n    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: String(a.fehler), 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 kopf = {};\n        if (a.kopf && typeof a.kopf === 'object') { Object.keys(a.kopf).forEach(function (k) { if (typeof a.kopf[k] === 'string') { kopf[k.toLowerCase()] = a.kopf[k]; } }); }\n        var rdap = (a.rdap && typeof a.rdap === 'object') ? a.rdap : null;\n        var tls = (a.tls && typeof a.tls === 'object') ? a.tls : {};\n        var http = (a.http && typeof a.http === 'object') ? a.http : {};\n        return {\n            fehler: null, ip: a.ip ? String(a.ip) : '', familie: zahl(a.familie) || 0, ptr: a.ptr ? String(a.ptr) : null, port: zahl(a.port),\n            rdap: rdap ? { name: rdap.name ? String(rdap.name) : null, org: rdap.org ? String(rdap.org) : null, land: rdap.land ? String(rdap.land) : null, rechenzentrum: rdap.rechenzentrum ? String(rdap.rechenzentrum) : null } : null,\n            tls: { protokoll: tls.protokoll ? String(tls.protokoll) : null, cipher: tls.cipher ? String(tls.cipher) : null, bits: zahl(tls.bits) },\n            http: { version: http.version ? String(http.version) : null, methode: http.methode ? String(http.methode) : null },\n            kopf: kopf, kopfAnzahl: zahl(a.kopf_anzahl) || Object.keys(kopf).length, cookieNamen: liste(a.cookie_namen).map(String),\n            gpc: !!a.gpc, dnt: a.dnt !== undefined && a.dnt !== null ? String(a.dnt) : null,\n            befunde: befunde, dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }<\/p>\n<p>    \/** Browser gegen Server: rein. Gibt weitere Befunde und Vergleichszeilen zurueck. *\/\n    function vergleichen(b, br) {\n        var zeilen = []; var befunde = [];\n        var serverSprache = b.kopf['accept-language'] ? b.kopf['accept-language'].split(',')[0].split(';')[0].trim() : null;\n        var browserSprache = br.sprachen.length ? br.sprachen[0] : null;\n        if (serverSprache !== null || browserSprache !== null) {\n            var gleichS = serverSprache !== null && browserSprache !== null && serverSprache.toLowerCase() === browserSprache.toLowerCase();\n            zeilen.push({ key: 'sprache', server: serverSprache || '-', browser: browserSprache || '-', gleich: gleichS });\n            if (!gleichS && serverSprache !== null && browserSprache !== null) { befunde.push({ key: 'b_sprache_abweichend', stufe: 'niedrig', daten: { server: serverSprache, browser: browserSprache } }); }\n        }\n        if (br.gpc !== null) {\n            var gleichG = br.gpc === b.gpc;\n            zeilen.push({ key: 'gpc', server: b.gpc ? '1' : '-', browser: br.gpc ? 'true' : 'false', gleich: gleichG });\n            if (!gleichG) { befunde.push({ key: 'b_gpc_abweichend', stufe: 'niedrig', daten: { server: b.gpc ? '1' : '-', browser: String(br.gpc) } }); }\n        }\n        if (br.ua !== null) {\n            var gleichU = b.kopf['user-agent'] === br.ua;\n            zeilen.push({ key: 'ua', server: b.kopf['user-agent'] || '-', browser: br.ua, gleich: gleichU });\n            if (!gleichU && b.kopf['user-agent']) { befunde.push({ key: 'b_ua_abweichend', stufe: 'info', daten: {} }); }\n        }\n        if (br.zeitzone) {\n            var land = b.rdap && b.rdap.land ? b.rdap.land : null;\n            var europa = \/^Europe\\\/\/.test(br.zeitzone);\n            var landEuropa = land ? \/^(AT|BE|BG|CH|CY|CZ|DE|DK|EE|ES|FI|FR|GB|GR|HR|HU|IE|IS|IT|LI|LT|LU|LV|MC|MT|NL|NO|PL|PT|RO|RS|SE|SI|SK|SM|UA|BA|ME|MK|AL|MD|BY|VA|AD|GI|FO)$\/i.test(land) : null;\n            zeilen.push({ key: 'zeitzone', server: land || '-', browser: br.zeitzone, gleich: landEuropa === null ? null : (landEuropa === europa) });\n            if (landEuropa !== null && landEuropa !== europa) { befunde.push({ key: 'b_zeitzone', stufe: 'niedrig', daten: { zeitzone: br.zeitzone, land: land } }); }\n        }\n        if (br.plattform) {\n            var sp = b.kopf['sec-ch-ua-platform'] ? b.kopf['sec-ch-ua-platform'].replace(\/\"\/g, '') : null;\n            zeilen.push({ key: 'plattform', server: sp || '-', browser: br.plattform, gleich: sp === null ? null : sp === br.plattform });\n        }\n        befunde.push({ key: 'b_geraet', stufe: 'info', daten: { bildschirm: br.bildschirm || '-', dpr: br.dpr === null ? '-' : br.dpr, kerne: br.kerne === null ? '-' : br.kerne, speicher: br.speicher === null ? '-' : br.speicher + ' GB', netz: br.netz || '-', cookies: br.cookies === null ? '-' : (br.cookies ? T.ja : T.nein) } });\n        return { zeilen: zeilen, befunde: befunde };\n    }<\/p>\n<p>    function abfragen() {\n        return fetch(ENDPUNKT, { method: 'GET', cache: 'no-store', credentials: 'same-origin' })\n            .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.MI = { bewerten: bewerten, sammeln: sammeln, vergleichen: vergleichen, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, T: T };<\/p>\n<p>    var btn = document.getElementById('mi-btn');\n    var out = document.getElementById('mi-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    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    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 darstellen(b, br, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var txt = T['fehler_' + b.fehler] || T.fehler_unbekannt;\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        var v = vergleichen(b, br);\n        var alle = b.befunde.concat(v.befunde);\n        var gruppen = {};\n        STUFEN.forEach(function (s) { gruppen[s] = alle.filter(function (f) { return f.stufe === s; }); });<\/p>\n<p>        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_verbindung));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_ip, b.ip + (b.familie ? '  (' + T['familie_' + b.familie] + ')' : '') + (b.port !== null ? ', ' + T.zeile_port + ' ' + b.port : ''));\n        paar(g, T.zeile_ptr, b.ptr || T.wert_keiner, b.ptr ? '' : GRAU);\n        if (b.rdap) { paar(g, T.zeile_netz, (b.rdap.name || '-') + (b.rdap.org ? ' \u2013 ' + b.rdap.org : '') + (b.rdap.land ? ' (' + b.rdap.land + ')' : '') + (b.rdap.rechenzentrum ? ' \u2013 ' + b.rdap.rechenzentrum : ''), b.rdap.rechenzentrum ? WARN : GRAU); }\n        paar(g, T.zeile_tls, b.tls.protokoll ? b.tls.protokoll + (b.tls.cipher ? ', ' + b.tls.cipher : '') + (b.tls.bits ? ' (' + b.tls.bits + ' bit)' : '') : T.wert_keiner, b.tls.protokoll && \/1\\.3\/.test(b.tls.protokoll) ? GUT : (b.tls.protokoll ? '' : ROT));\n        paar(g, T.zeile_http, b.http.version || '-', GRAU);\n        paar(g, T.zeile_cookies, b.cookieNamen.length ? b.cookieNamen.join(', ') : T.wert_keiner, GRAU);\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);<\/p>\n<p>        var kopfKeys = KOPF_REIHE.filter(function (k) { return typeof b.kopf[k] === 'string'; });\n        ziel.appendChild(el('div', UEBERSCHRIFT, text('h_kopf', { n: kopfKeys.length })));\n        var gk = gitter('auto auto');\n        kopfKeys.forEach(function (k) { paar(gk, k, b.kopf[k], (k === 'sec-gpc' || k === 'dnt') ? GUT : (k === 'user-agent' ? '' : GRAU)); });\n        ziel.appendChild(gk);<\/p>\n<p>        if (v.zeilen.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_vergleich));\n            var huelle = el('div', 'overflow-x: auto;');\n            var gv = gitter('auto auto auto auto');\n            [T.spalte_merkmal, T.server_sieht, T.browser_sagt, ''].forEach(function (s) { gv.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee); white-space: nowrap;', s)); });\n            v.zeilen.forEach(function (z) {\n                gv.appendChild(el('div', ZELLE + ' white-space: nowrap;', T['v_' + z.key]));\n                gv.appendChild(el('div', ZELLE_WERT + GRAU, z.server));\n                gv.appendChild(el('div', ZELLE_WERT + GRAU, z.browser));\n                gv.appendChild(el('div', ZELLE_WERT + (z.gleich === null ? GRAU : (z.gleich ? GUT : WARN)), z.gleich === null ? '\u2013' : (z.gleich ? T.gleich : T.verschieden)));\n            });\n            huelle.appendChild(gv);\n            ziel.appendChild(huelle);\n        }<\/p>\n<p>        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        var irgendwas = false;\n        STUFEN.forEach(function (s) {\n            var gr = 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.MI.darstellen = darstellen;<\/p>\n<p>    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        var br = sammeln();\n        abfragen().then(function (a) { darstellen(bewerten(a), br, out); laeuft = false; btn.disabled = false; },\n            function () { darstellen(bewerten({ fehler: 'netz' }), br, out); laeuft = false; btn.disabled = false; });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pokazuje, czego ten serwer dowiaduje si\u0119 z wizyty, zanim uruchomi si\u0119 jakikolwiek skrypt: adres i w\u0142a\u015bciciela sieci, wersj\u0119 TLS i szyfr, wersj\u0119 HTTP, ka\u017cdy nag\u0142\u00f3wek \u017c\u0105dania wraz z Global Privacy Control, Do Not Track i Client Hints, i por\u00f3wnuje to z tym, co przegl\u0105darka sama o sobie m\u00f3wi.<\/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,92310,92077],"class_list":["post-15563","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-pl","tag-networking-pl","tag-web-security-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lustro po\u0142\u0105czenia: co widzi serwer - 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\/connection-mirror-what-the-server-sees\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lustro po\u0142\u0105czenia: co widzi serwer - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Pokazuje, czego ten serwer dowiaduje si\u0119 z wizyty, zanim uruchomi si\u0119 jakikolwiek skrypt: adres i w\u0142a\u015bciciela sieci, wersj\u0119 TLS i szyfr, wersj\u0119 HTTP, ka\u017cdy nag\u0142\u00f3wek \u017c\u0105dania wraz z Global Privacy Control, Do Not Track i Client Hints, i por\u00f3wnuje to z tym, co przegl\u0105darka sama o sobie m\u00f3wi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/\" \/>\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\\\/connection-mirror-what-the-server-sees\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/connection-mirror-what-the-server-sees\\\/\",\"name\":\"Lustro po\u0142\u0105czenia: co widzi serwer - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-05T12:19:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/connection-mirror-what-the-server-sees\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/connection-mirror-what-the-server-sees\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/connection-mirror-what-the-server-sees\\\/#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\":\"Lustro po\u0142\u0105czenia: co widzi serwer\"}]},{\"@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":"Lustro po\u0142\u0105czenia: co widzi serwer - 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\/connection-mirror-what-the-server-sees\/","og_locale":"en_US","og_type":"article","og_title":"Lustro po\u0142\u0105czenia: co widzi serwer - Lukas Wojcik - Blog","og_description":"Pokazuje, czego ten serwer dowiaduje si\u0119 z wizyty, zanim uruchomi si\u0119 jakikolwiek skrypt: adres i w\u0142a\u015bciciela sieci, wersj\u0119 TLS i szyfr, wersj\u0119 HTTP, ka\u017cdy nag\u0142\u00f3wek \u017c\u0105dania wraz z Global Privacy Control, Do Not Track i Client Hints, i por\u00f3wnuje to z tym, co przegl\u0105darka sama o sobie m\u00f3wi.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/","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\/connection-mirror-what-the-server-sees\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/","name":"Lustro po\u0142\u0105czenia: co widzi serwer - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-05T12:19:46+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/connection-mirror-what-the-server-sees\/#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":"Lustro po\u0142\u0105czenia: co widzi serwer"}]},{"@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\/15563","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=15563"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15563\/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=15563"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}