{"id":19521,"date":"2026-05-30T15:02:41","date_gmt":"2026-05-30T13:02:41","guid":{"rendered":"https:\/\/webhosting.de\/http-conditional-requests-cache-validierung-optimierung-paket\/"},"modified":"2026-05-30T15:02:41","modified_gmt":"2026-05-30T13:02:41","slug":"pakiet-optymalizacji-walidacji-pamieci-podrecznej-zadan-warunkowych-http","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/http-conditional-requests-cache-validierung-optimierung-paket\/","title":{"rendered":"Zrozumienie warunkowych \u017c\u0105da\u0144 HTTP i walidacji pami\u0119ci podr\u0119cznej"},"content":{"rendered":"<p><strong>HTTP Conditional<\/strong> \u017b\u0105dania zmniejszaj\u0105 koszty transmisji, zapewniaj\u0105c, \u017ce klient \u0142aduje zas\u00f3b tylko wtedy, gdy zosta\u0142 on faktycznie zmieniony od ostatniego \u017c\u0105dania. Poka\u017c\u0119 jak <strong>Walidacja pami\u0119ci podr\u0119cznej<\/strong> z ETag, Last-Modified, If-None-Match, If-Modified-Since i 304 Not Modified dzia\u0142a niezawodnie, a czas \u0142adowania jest zauwa\u017calnie skr\u00f3cony.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Walidacja<\/strong> zamiast pe\u0142nego pobierania: 304 oszcz\u0119dza przepustowo\u015b\u0107 i czas.<\/li>\n  <li><strong>ETag<\/strong> i Last-Modified wsp\u00f3\u0142pracuj\u0105 ze sob\u0105 w celu zapewnienia czystej kontroli.<\/li>\n  <li><strong>Kontrola pami\u0119ci podr\u0119cznej<\/strong> definiuje \u015bwie\u017co\u015b\u0107, wygasa tylko suplementy.<\/li>\n  <li><strong>Warunki wst\u0119pne<\/strong> takich jak bezpieczne procesy zapisu If-Match.<\/li>\n  <li><strong>Bezpiecze\u0144stwo<\/strong> wymaga prywatnego\/nieprzechowywania poufnych tre\u015bci.<\/li>\n<\/ul>\n\n<h2>Co pro\u015bby warunkowe robi\u0105 w codziennym \u017cyciu<\/h2>\n\n<p>Ustawi\u0142em <strong>Warunkowy<\/strong> pro\u015bby o zadanie serwerowi jasnego pytania: Czy naprawd\u0119 musz\u0119 przes\u0142a\u0107 nowe dane, czy moja pami\u0119\u0107 podr\u0119czna jest wystarczaj\u0105ca? Przegl\u0105darka lub proxy wysy\u0142a warunki, serwer sprawdza, czy plik si\u0119 zmieni\u0142 i odpowiada 304 Not Modified bez tre\u015bci. Ten wzorzec utrzymuje aktualno\u015b\u0107 HTML, CSS, JavaScript, obraz\u00f3w i odpowiedzi API oraz znacznie zmniejsza obci\u0105\u017cenie infrastruktury. W przypadku d\u0142u\u017cszych wa\u017cnych zasob\u00f3w u\u017cywam d\u0142ugich warto\u015bci maksymalnego wieku i upewniam si\u0119, \u017ce s\u0105 one aktualne poprzez walidacj\u0119. Je\u015bli masz odpowiednie <a href=\"https:\/\/webhosting.de\/pl\/strategie-kontroli-pamieci-podrecznej-http-hosting-cachemaster\/\">Strategie kontroli pami\u0119ci podr\u0119cznej<\/a> pozwala na maksymalne wykorzystanie pami\u0119ci podr\u0119cznej bez ryzyka nieaktualnej zawarto\u015bci.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/httpcache-0614.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Nag\u0142\u00f3wki umo\u017cliwiaj\u0105ce walidacj\u0119 pami\u0119ci podr\u0119cznej<\/h2>\n\n<p>Dla niezawodno\u015bci <strong>Schowek<\/strong>-Klient potrzebuje jasnych sygna\u0142\u00f3w z odpowiedzi, aby podejmowa\u0107 decyzje. U\u017cywam Cache-Control dla \u015bwie\u017co\u015bci i regu\u0142, Expires czasami jako uzupe\u0142nienie, a Last-Modified i ETag dla faktycznej walidacji. Last-Modified zapewnia czas modyfikacji, kt\u00f3ry mo\u017cna szybko sprawdzi\u0107, podczas gdy ETag zapewnia identyfikator wersji, kt\u00f3ry jest r\u00f3wnie\u017c u\u017cywany w przypadku tre\u015bci dynamicznych. Wa\u017cne: no-cache oznacza walidacj\u0119 przed u\u017cyciem, a nie usuni\u0119cie. Je\u015bli zastosujesz t\u0119 semantyk\u0119 poprawnie, osi\u0105gniesz zauwa\u017calnie mniejszy ruch danych przy jednoczesnym zachowaniu aktualno\u015bci tre\u015bci. <strong>Zawarto\u015b\u0107<\/strong>.<\/p>\n\n<h2>Sekwencja \u017c\u0105dania warunkowego bez objazd\u00f3w<\/h2>\n\n<p>Przy pierwszym wywo\u0142aniu klient zapisuje plik i warto\u015bci walidacyjne, takie jak <strong>ETag<\/strong> lub Last-Modified w pami\u0119ci podr\u0119cznej. P\u00f3\u017aniej zas\u00f3b wygasa lub wymaga nowego sprawdzenia przed u\u017cyciem, a klient wysy\u0142a If-None-Match lub If-Modified-Since. Serwer por\u00f3wnuje informacje z aktualnym stanem i zwraca 200 OK z now\u0105 tre\u015bci\u0105 lub 304 Not Modified bez \u0142adunku. Nast\u0119pnie klient kontynuuje korzystanie z istniej\u0105cej kopii i oszcz\u0119dza transmisj\u0119, obci\u0105\u017cenie TLS i czas. Ten ping-pong wydaje si\u0119 niepozorny, ale <strong>Efekt<\/strong> na odczuwanie obci\u0105\u017cenia i obci\u0105\u017cenie serwera jest jasne.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_requests_besprechung_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>ETag vs. Last-Modified w bezpo\u015brednim por\u00f3wnaniu<\/h2>\n\n<p>U\u017cywam <strong>Ostatnio zmodyfikowany<\/strong> Lubi\u0119 u\u017cywa\u0107 znacznik\u00f3w czasu jako szybkiego, prostego odniesienia, ale u\u017cywam ETag\u00f3w do precyzyjnej kontroli. Znaczniki czasu mog\u0105 osi\u0105gn\u0105\u0107 swoje granice przy bardzo kr\u00f3tkich interwa\u0142ach zmian lub fa\u0142szowa\u0107 dynamiczne dane wyj\u015bciowe. Tworz\u0119 ETagi na podstawie skr\u00f3t\u00f3w plik\u00f3w, wersji baz danych lub wariant\u00f3w renderowania, przy czym ka\u017cda zmiana zawarto\u015bci generuje nowy identyfikator. Oba mechanizmy mo\u017cna \u0142\u0105czy\u0107: Klient mo\u017ce wysy\u0142a\u0107 r\u00f3wnolegle If-None-Match i If-Modified-Since, a serwer wybiera odpowiednie sprawdzenie. W ten spos\u00f3b zapewniam niezawodno\u015b\u0107 <strong>Walidacja<\/strong>, co dotyczy zar\u00f3wno zasob\u00f3w statycznych, jak i dynamicznych.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Kryterium<\/th>\n      <th>Ostatnio zmodyfikowany<\/th>\n      <th>ETag<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>Dok\u0142adno\u015b\u0107<\/strong><\/td>\n      <td>Druga rozdzielczo\u015b\u0107, odpowiednia dla plik\u00f3w<\/td>\n      <td>Identyfikator wersji dla ka\u017cdej zmiany zawarto\u015bci<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Dynamika<\/strong><\/td>\n      <td>S\u0142abe z cz\u0119stymi zmianami nieopartymi na plikach<\/td>\n      <td>Silny dla interfejs\u00f3w API i renderowanej zawarto\u015bci<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Wydatki<\/strong><\/td>\n      <td>Niski, dost\u0119pny z systemu plik\u00f3w<\/td>\n      <td>Niski do umiarkowanego, generowanie w aplikacji\/proxy<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Konflikty<\/strong><\/td>\n      <td>Mo\u017cliwe odchylenia zegara<\/td>\n      <td>Mo\u017cliwe nieprawid\u0142owo skonfigurowane znaczniki weak\/strong<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Prawid\u0142owe ustawienia buforowania przegl\u0105darki i interfejs\u00f3w API<\/h2>\n\n<p>W przypadku statycznych zasob\u00f3w u\u017cywam d\u0142ugich <strong>maksymalny wiek<\/strong> i zapisa\u0107 za pomoc\u0105 ETag lub skr\u00f3tu nazwy pliku, aby aktualizacje by\u0142y natychmiast rozpoznawane. Cz\u0119sto oznaczam HTML i odpowiedzi API jako no-cache, aby klient sprawdza\u0142 poprawno\u015b\u0107 przed u\u017cyciem bez konieczno\u015bci prze\u0142adowywania wszystkiego za ka\u017cdym razem. Spersonalizowane strony oznaczam jako prywatne, aby wsp\u00f3\u0142dzielone pami\u0119ci podr\u0119czne nie wy\u015bwietla\u0142y niczego, co zosta\u0142o zachowane dla innych. B\u0142\u0119dy s\u0105 cz\u0119sto powodowane przez sprzeczne dyrektywy lub brakuj\u0105ce nag\u0142\u00f3wki walidacji, kt\u00f3rych unikam dzi\u0119ki jasnym regu\u0142om. Je\u015bli znasz typowe przeszkody, mo\u017cesz \u0142atwo ich unikn\u0105\u0107; dobre przyk\u0142ady mo\u017cna znale\u017a\u0107 w artykule na temat <a href=\"https:\/\/webhosting.de\/pl\/http-cache-headers-sabotieren-caching-cachefix\/\">Pu\u0142apki nag\u0142\u00f3wk\u00f3w w buforowaniu<\/a>, na kt\u00f3rym lubi\u0119 si\u0119 orientowa\u0107.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http-conditional-cache-validation-3847.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Efektywne korzystanie z kod\u00f3w stanu i warunk\u00f3w<\/h2>\n\n<p>Organizuj\u0119 <strong>Kody statusu<\/strong> wyra\u017anie: 200 OK dostarcza zawarto\u015b\u0107, 304 Not Modified potwierdza u\u017cycie pami\u0119ci podr\u0119cznej, a 412 Precondition Failed anuluje, je\u015bli warunek nie jest spe\u0142niony. W przypadku bezpiecznych operacji zapisu u\u017cywam If-Match, aby aktualizacje by\u0142y skuteczne tylko wtedy, gdy ETag odpowiada oczekiwanej wersji. Odczyt za pomoc\u0105 If-None-Match lub If-Modified-Since zapobiega zb\u0119dnym \u0142adunkom i utrzymuje synchronizacj\u0119 klient\u00f3w. Sp\u00f3jne zachowanie jest wa\u017cne: Ten sam punkt ko\u0144cowy powinien odpowiada\u0107 identycznie dla identycznych warunk\u00f3w wst\u0119pnych. W przypadku SEO i bot\u00f3w zwracam uwag\u0119 na to, jak cache i crawlery interpretuj\u0105 komunikaty o stanie; dobry przegl\u0105d <a href=\"https:\/\/webhosting.de\/pl\/kody-statusu-http-indeksowanie-optymalizacja-hostingu-crawlboost\/\">Kody stanu HTTP i indeksowanie<\/a> pomaga w podejmowaniu czystych decyzji.<\/p>\n\n<h2>Bezpiecze\u0144stwo i ochrona danych dla buforowania<\/h2>\n\n<p>Wra\u017cliwe tre\u015bci traktuj\u0119 z <strong>no-store<\/strong> a tym samym nie daj\u0105 im szansy na znalezienie si\u0119 w pami\u0119ci podr\u0119cznej przegl\u0105darki lub serwera proxy. Oznaczam spersonalizowane strony za pomoc\u0105 Cache-Control: private i sprawdzam, czy \u017cadne dane osobowe nie pojawiaj\u0105 si\u0119 w d\u0142ugoterminowych buforowanych adresach URL. Projektuj\u0119 ETags neutralnie, nie pozwalaj\u0105c na wyci\u0105ganie wniosk\u00f3w na temat kont u\u017cytkownik\u00f3w lub wewn\u0119trznych identyfikator\u00f3w. Konsekwentnie dezaktywuj\u0119 ca\u0142e buforowanie dla widok\u00f3w logowania i przep\u0142yw\u00f3w bankowych. Je\u015bli po\u0142\u0105czysz minimalizacj\u0119 danych, odpowiednie dyrektywy i czyste nag\u0142\u00f3wki, zmniejszysz ryzyko i ochronisz swoje dane. <strong>Poufno\u015b\u0107<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_cache_validierung_6789.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wdro\u017cenie: kroki dla serwera i aplikacji<\/h2>\n\n<p>Na pocz\u0105tku oddzielam <strong>statyczny<\/strong> dynamicznych zasob\u00f3w i decyduj\u0119, gdzie d\u0142ugie terminy maj\u0105 sens, a gdzie priorytet ma walidacja. W Nginx, Apache lub serwerze aplikacji konfiguruj\u0119 kontrol\u0119 pami\u0119ci podr\u0119cznej i aktywuj\u0119 last-modified i ETags, przy czym umieszczam generowanie ETag w aplikacji dla dynamicznych punkt\u00f3w ko\u0144cowych. Podczas przetwarzania \u017c\u0105da\u0144 przychodz\u0105cych oceniam If-None-Match i If-Modified-Since i odpowiadam 304, je\u015bli warunek si\u0119 zgadza. W przypadku operacji zapisu u\u017cywam If-Match i zwracam 412 w przypadku odchyle\u0144, aby zapobiec nadpisywaniu. Tworzy to sp\u00f3jne zachowanie, kt\u00f3re efektywnie wykorzystuje pami\u0119\u0107 podr\u0119czn\u0105 i jednocze\u015bnie <strong>Poprawno\u015b\u0107<\/strong> zapewnia.<\/p>\n\n<h2>Rozs\u0105dne korzystanie z metryk, test\u00f3w i monitorowania<\/h2>\n\n<p>Sprawdzam <strong>Sie\u0107<\/strong>-tab narz\u0119dzia DevTools, aby sprawdzi\u0107, czy zasoby pochodz\u0105 z pami\u0119ci podr\u0119cznej, s\u0105 weryfikowane lub \u015bwie\u017co za\u0142adowane. Monitoruj\u0119 status, warto\u015bci wieku, ETagi i rozmiar przes\u0142anej odpowiedzi. Pod obci\u0105\u017ceniem mierz\u0119 op\u00f3\u017anienie, wielko\u015b\u0107 transferu i procesor serwera, aby zobaczy\u0107 rzeczywisty efekt 304 odpowiedzi. Dzienniki z odwrotnego serwera proxy pokazuj\u0105, czy wsp\u00f3\u0142dzielone pami\u0119ci podr\u0119czne wykonuj\u0105 swoj\u0105 prac\u0119 i ile walidacji zako\u0144czy\u0142o si\u0119 powodzeniem. U\u017cywam tych danych, aby dostosowa\u0107 maksymalny wiek, dyrektywy kontroli pami\u0119ci podr\u0119cznej i strategie ETag, a\u017c do uzyskania czas\u00f3w odpowiedzi i <strong>Wsp\u00f3\u0142czynnik trafie\u0144<\/strong> g\u0142osowanie.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/EntwicklerdeskCache3178.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wydajno\u015b\u0107 hostingu: dlaczego \u017c\u0105dania warunkowe pozwalaj\u0105 zaoszcz\u0119dzi\u0107 pieni\u0105dze<\/h2>\n\n<p>Ka\u017cdy <strong>304<\/strong>-Wsp\u00f3\u0142dzielona odpowied\u017a z pami\u0119ci podr\u0119cznej oszcz\u0119dza przepustowo\u015b\u0107, zmniejsza narzut TLS i skraca czas odpowiedzi, co jest szczeg\u00f3lnie wa\u017cne w przypadku wielu podobnych \u017c\u0105da\u0144. W konfiguracjach hostingu z odwrotnymi serwerami proxy, r\u00f3wnowa\u017ceniem obci\u0105\u017cenia i CDN, osi\u0105gam najwi\u0119kszy efekt, gdy wyra\u017anie zezwalam lub wykluczam wsp\u00f3\u0142dzielone pami\u0119ci podr\u0119czne. Mniejszy transfer cz\u0119sto oznacza r\u00f3wnie\u017c ni\u017csze koszty ruchu w euro i wi\u0119cej rezerw na rzeczywiste szczyty obci\u0105\u017cenia. Do\u015bwiadczenie u\u017cytkownika jest r\u00f3wnie\u017c lepsze, poniewa\u017c powtarzaj\u0105ce si\u0119 ods\u0142ony stron i ankiety API reaguj\u0105 szybciej. W ten spos\u00f3b wykorzystuj\u0119 potencja\u0142 wydajno\u015bci, kt\u00f3rego same aktualizacje sprz\u0119towe nie s\u0105 w stanie zapewni\u0107 i wykorzystuj\u0119 istniej\u0105ce rozwi\u0105zania. <strong>Infrastruktura<\/strong> lepiej.<\/p>\n\n<h2>Typowe b\u0142\u0119dy i pragmatyczne rozwi\u0105zania<\/h2>\n\n<p>Sprzeczno\u015b\u0107 <strong>Nag\u0142\u00f3wek<\/strong> takie jak no-cache w po\u0142\u0105czeniu z terminem wyga\u015bni\u0119cia daleko w przysz\u0142o\u015bci dezorientuj\u0105 pami\u0119ci podr\u0119czne; ustawiam jasne regu\u0142y bez powielania. Brakuj\u0105ce ETagi dla dynamicznych punkt\u00f3w ko\u0144cowych prowadz\u0105 do niepotrzebnych pe\u0142nych pobra\u0144; dodaj\u0119 wiarygodny identyfikator i oceniam, czy nie pasuje. Zbyt kr\u00f3tkie warto\u015bci maksymalnego wieku marnuj\u0105 potencja\u0142 rzadko zmienianych plik\u00f3w; wyd\u0142u\u017cam terminy i nadal zabezpieczam je walidacj\u0105. Agresywne buforowanie HTML op\u00f3\u017ania widoczne zmiany; \u0142\u0105cz\u0119 no-cache z ETag i aktualizuj\u0119 zawarto\u015b\u0107. Dzi\u0119ki jasnym decyzjom dotycz\u0105cym \u015bwie\u017co\u015bci, walidacji i wa\u017cno\u015bci, rozwi\u0105zuj\u0119 te przeszkody i wzmacniam <strong>Mo\u017cliwo\u015b\u0107 planowania<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/cache-validierung-5836.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>U\u017cywaj Vary czysto i kontroluj reprezentacje<\/h2>\n\n<p>Aby upewni\u0107 si\u0119, \u017ce \u017c\u0105dania warunkowe dzia\u0142aj\u0105 bezpiecznie we wsp\u00f3\u0142dzielonych buforach, upewniam si\u0119, \u017ce u\u017cywam poprawnego <strong>R\u00f3\u017cne<\/strong>. Nag\u0142\u00f3wek definiuje, kt\u00f3re nag\u0142\u00f3wki \u017c\u0105dania wp\u0142ywaj\u0105 na reprezentacj\u0119. Typowe przyk\u0142ady to <em>Akceptowane kodowanie<\/em> (gzip, br), <em>Akceptuj j\u0119zyk<\/em> oraz <em>Akceptuj<\/em>. Je\u015bli dostarczam tre\u015bci na j\u0119zyk, ustawiam Vary: Accept-Language, aby serwer proxy nie udost\u0119pnia\u0142 niemieckiej wersji w odpowiedzi na francuskie \u017c\u0105danie. W przypadku spersonalizowanych tre\u015bci celowo rezygnuj\u0119 z Vary: Cookie i zamiast tego u\u017cywam <em>Kontrola pami\u0119ci podr\u0119cznej: prywatna<\/em>, aby unikn\u0105\u0107 niekontrolowanej eksplozji kluczy pami\u0119ci podr\u0119cznej. W przypadku zasob\u00f3w, kt\u00f3re s\u0105 dostarczane tylko z wa\u017cn\u0105 autoryzacj\u0105, u\u017cywam opcji prywatnej lub zapewniam wyra\u017an\u0105 separacj\u0119 za pomoc\u0105 Vary: Authorisation lub Vary w odpowiednich nag\u0142\u00f3wkach. Sp\u00f3jno\u015b\u0107 jest wa\u017cna: wybrany zestaw wymiar\u00f3w Vary musi pozosta\u0107 stabilny, w przeciwnym razie wska\u017anik trafie\u0144 w pami\u0119ci podr\u0119cznej i korzy\u015bci z walidacji spadn\u0105, poniewa\u017c stale tworzone s\u0105 nowe warianty.<\/p>\n\n<h2>Silne i s\u0142abe znaczniki ETag, kompresja i r\u00f3wno\u015b\u0107 bajt\u00f3w<\/h2>\n\n<p><strong>Silne znaczniki ETag<\/strong> charakteryzuj\u0105 identyczne reprezentacje bajt po bajcie i umo\u017cliwiaj\u0105 precyzyjn\u0105 walidacj\u0119, r\u00f3wnie\u017c w po\u0142\u0105czeniu z \u017c\u0105daniami zakresu. <strong>S\u0142abe znaczniki ETag<\/strong> (W\/...) sygnalizuj\u0105 jedynie r\u00f3wno\u015b\u0107 zawarto\u015bci, niekoniecznie identyczne bajty. W praktyce u\u017cywam silnych ETag\u00f3w, je\u015bli mog\u0119 wygenerowa\u0107 unikalny identyfikator dla ka\u017cdej reprezentacji (w tym kompresji). Gdy tylko odwrotne proxy u\u017cywa gzip lub brotli w locie, dostosowuj\u0119 generowanie ETag\u00f3w lub prze\u0142\u0105czam si\u0119 na s\u0142abe ETagi, aby serwer i klient nie rozpozna\u0142y b\u0142\u0119dnie r\u00f3\u017cnych bajt\u00f3w jako identycznych. Solidnym wariantem jest utworzenie ETag z ostatnich bajt\u00f3w dostarczonej odpowiedzi i jednoczesne u\u017cycie <em>Vary: Accept-Encoding<\/em> do ustawienia. Gwarantuje to, \u017ce \u201egzip\u201c i \u201ebr\u201c otrzymaj\u0105 w\u0142asne prawid\u0142owe ETagi. Tam, gdzie nie mog\u0119 zapewni\u0107 r\u00f3wno\u015bci bajt\u00f3w (np. r\u00f3\u017cne znaczniki czasu w HTML), wybieram s\u0142abe ETagi, kt\u00f3re nadal pozwalaj\u0105 na niezawodne odpowiedzi 304, o ile znaczenie strony nie uleg\u0142o zmianie.<\/p>\n\n<h2>Kontrola pami\u0119ci podr\u0119cznej w dostrajaniu: s-maxage, must-revalidate, stale-while-revalidate<\/h2>\n\n<p>Opr\u00f3cz <em>maksymalny wiek<\/em> W szczeg\u00f3lno\u015bci u\u017cywam drobniejszych dyrektyw. <strong>s-maxage<\/strong> adresy wy\u0142\u0105cznie <em>Wsp\u00f3\u0142dzielone pami\u0119ci podr\u0119czne<\/em> (CDN, serwery proxy) i pozwala mi na bardziej agresywne buforowanie ni\u017c w przegl\u0105darce. <strong>musisz ponownie potwierdzi\u0107<\/strong> zmusza klient\u00f3w, aby nie u\u017cywali wygas\u0142ej zawarto\u015bci heurystycznie, ale zawsze j\u0105 weryfikowali - pomocne w przypadku krytycznych danych. <strong>proxy-revalidate<\/strong> odnosi si\u0119 do tego obowi\u0105zku w szczeg\u00f3lno\u015bci do wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych. Z <strong>stale-while-revalidate<\/strong> Zezwalam na kr\u00f3tkie dostarczenie nieco nieaktualnej kopii, podczas gdy walidacja dzia\u0142a w tle; u\u017cytkownicy widz\u0105 co\u015b natychmiast, a nast\u0119pne \u017c\u0105danie korzysta ze \u015bwie\u017cych metadanych. <strong>stale-if-error<\/strong> jako zabezpieczenie: Je\u015bli Origin zawiedzie lub zwr\u00f3ci b\u0142\u0119dy, pami\u0119\u0107 podr\u0119czna mo\u017ce dostarcza\u0107 ostatni\u0105 znan\u0105 kopi\u0119 przez okre\u015blony czas. W przypadku zasob\u00f3w build-hashed \u0142\u0105cz\u0119 d\u0142ugi maksymalny wiek z <em>niezmienny<\/em>, poniewa\u017c nazwa pliku zmienia si\u0119 wraz z zawarto\u015bci\u0105, a po\u015brednie walidacje s\u0105 niepotrzebne. W przypadku HTML i API, no-cache plus walidator pozostaje z\u0142otym standardem, aby zapewni\u0107 aktualno\u015b\u0107 i nadal oszcz\u0119dza\u0107 przepustowo\u015b\u0107.<\/p>\n\n<h2>Dalsze warunki i metody: HEAD, zasi\u0119g i pisanie konflikt\u00f3w<\/h2>\n\n<p>\u017b\u0105dania warunkowe nie s\u0105 ograniczone do GET. A <strong>HEAD<\/strong>-request zawiera tylko nag\u0142\u00f3wki i jest idealny do szybkiej walidacji bez tre\u015bci. Dla du\u017cych plik\u00f3w u\u017cywam <strong>Zasi\u0119g<\/strong>-\u017c\u0105dania; z <strong>Je\u015bli-zakres<\/strong> Upewniam si\u0119, \u017ce cz\u0119\u015bciowe obszary s\u0105 wysy\u0142ane tylko wtedy, gdy zas\u00f3b nadal odpowiada oczekiwanej wersji - w przeciwnym razie odpowiadam 200 i pe\u0142n\u0105 tre\u015bci\u0105. W przypadku operacji zapisu zapewniam sp\u00f3jno\u015b\u0107 z <strong>If-Match<\/strong> ab: PUT, PATCH lub DELETE dzia\u0142aj\u0105 tylko wtedy, gdy ETag klienta pasuje do bie\u017c\u0105cej wersji; w przeciwnym razie odpowiadam 412 Precondition Failed. Tam, gdzie chc\u0119 wymusi\u0107 warunki wst\u0119pne, na przyk\u0142ad w przypadku zasob\u00f3w podatnych na konflikty, u\u017cywam 428 Wymagany warunek wst\u0119pny, aby sk\u0142oni\u0107 klient\u00f3w do u\u017cycia If-Match. Celowo wybieram mi\u0119dzy 409 Conflict i 412: 412 sygnalizuje naruszone warunki wst\u0119pne, 409 podkre\u015bla konflikty tre\u015bci (np. regu\u0142y logiki biznesowej). Ta jasno\u015b\u0107 u\u0142atwia implementacje klienckie i pozwala unikn\u0105\u0107 \u015blepych nadpisa\u0144.<\/p>\n\n<h2>Personalizacja, pliki cookie i ochrona danych w praktyce<\/h2>\n\n<p>W przypadku spersonalizowanych stron zaznaczam odpowiedzi za pomoc\u0105 <strong>prywatny<\/strong> lub <strong>no-store<\/strong>. Unikam kodowania stan\u00f3w u\u017cytkownika w e-tagach, poniewa\u017c takie \u201eindywidualne\u201c e-tagi mog\u0105 mimowolnie sta\u0107 si\u0119 znacznikami \u015bledzenia. Zamiast tego \u015bci\u015ble rozr\u00f3\u017cniam reprezentacje publiczne i prywatne. Ustawiam pliki cookie w kluczu pami\u0119ci podr\u0119cznej (Vary: Cookie) tylko wtedy, gdy jest to absolutnie konieczne, poniewa\u017c zwi\u0119kszaj\u0105 one liczb\u0119 wariant\u00f3w i znacznie zmniejszaj\u0105 wsp\u00f3\u0142czynnik trafie\u0144. W przypadku autoryzowanych odpowiedzi API trzymam si\u0119 <em>Kontrola pami\u0119ci podr\u0119cznej: prywatna<\/em> i, je\u015bli to konieczne, do Vary w formacie nag\u0142\u00f3wka autoryzacji. W ten spos\u00f3b zapewniam, \u017ce wsp\u00f3\u0142dzielone pami\u0119ci podr\u0119czne nie udost\u0119pniaj\u0105 przypadkowo poufnych odpowiedzi. W aplikacjach o mieszanej zawarto\u015bci (publiczna struktura podstawowa, spersonalizowane podobszary) polegam na fragmentarycznym buforowaniu lub brzegowym ESI\/SSI, podczas gdy krytyczne cz\u0119\u015bci pozostaj\u0105 prywatne. Rezultatem jest ochrona danych bez spadku wydajno\u015bci.<\/p>\n\n<h2>Dzia\u0142anie: sieci CDN, surogaty i uniewa\u017cnienia<\/h2>\n\n<p>W konfiguracjach CDN \u0142\u0105cz\u0119 <strong>s-maxage<\/strong> z wyra\u017anymi walidatorami i - je\u015bli s\u0105 dost\u0119pne - u\u017cywaj dyrektyw specyficznych dla surogat\u00f3w do kontrolowania pami\u0119ci podr\u0119cznych kraw\u0119dzi niezale\u017cnie od przegl\u0105darki. Ponowna walidacja zmniejsza obci\u0105\u017cenie Origin, ale czasami konieczne jest twarde uniewa\u017cnienie (np. poprawka bezpiecze\u0144stwa). Planuj\u0119 wtedy dwa sposoby: <em>Niszczenie pami\u0119ci podr\u0119cznej<\/em> poprzez skr\u00f3ty nazw plik\u00f3w dla zasob\u00f3w statycznych i <em>Oczyszczenie<\/em>\/Invalidation dla HTML i API. Zapobiega to \u201eburzom oczyszczania\u201c i nadal utrzymuje kr\u00f3tki czas od\u015bwie\u017cania. Wa\u017cne jest r\u00f3wnie\u017c, aby mie\u0107 sp\u00f3jny klucz pami\u0119ci podr\u0119cznej w CDN (w tym host, \u015bcie\u017ck\u0119, parametry zapytania i odpowiednie nag\u0142\u00f3wki Vary). W przypadku parametr\u00f3w zapytania \u015bwiadomie rozr\u00f3\u017cniam parametry semantyczne (np. ?lang=) i czysto zwi\u0105zane ze \u015bledzeniem; ignoruj\u0119 te ostatnie w kluczu pami\u0119ci podr\u0119cznej, aby unikn\u0105\u0107 fragmentacji. Dzi\u0119ki temu \u0142a\u0144cuch pami\u0119ci podr\u0119cznej przegl\u0105darki, po\u015bredniego serwera proxy i CDN jest przejrzysty i przewidywalny.<\/p>\n\n<h2>304 w szczeg\u00f3\u0142ach: Poprawna aktualizacja nag\u0142\u00f3wka i metadanych<\/h2>\n\n<p>R\u00f3wnie\u017c <strong>304<\/strong>-Odpowied\u017a zawiera wa\u017cne metadane. Dostarczam Date, Cache-Control, ETag\/Last-Modified i - je\u015bli to istotne - Expires i Vary ponownie, aby klient m\u00f3g\u0142 zaktualizowa\u0107 swoje wpisy w pami\u0119ci podr\u0119cznej. Content-Type i Content-Encoding niekoniecznie musz\u0105 by\u0107 powtarzane, ale mog\u0105 przyczyni\u0107 si\u0119 do przejrzysto\u015bci. Wa\u017cne jest, aby 304 nie zawiera\u0142 \u0142adunku cia\u0142a i aby wysy\u0142a\u0107 sp\u00f3jne walidatory: Zmiana ETag w 304 bez zmiany reprezentacji prowadzi do nieporozumie\u0144. Je\u015bli wytyczne zostan\u0105 dostosowane (np. d\u0142u\u017cszy maksymalny wiek), klient mo\u017ce przyj\u0105\u0107 metadane bez konieczno\u015bci prze\u0142adowywania tre\u015bci - niewielka d\u017awignia o du\u017cym wp\u0142ywie na postrzegan\u0105 wydajno\u015b\u0107.<\/p>\n\n<h2>Strategie testowania i debugowania dla czystej walidacji<\/h2>\n\n<p>W szczeg\u00f3lno\u015bci sprawdzam nast\u0119puj\u0105ce punkty w DevTools: <em>z pami\u0119ci podr\u0119cznej dysku<\/em> vs. <em>z pami\u0119ci podr\u0119cznej<\/em> vs. <em>rewalidowany<\/em>; Status 200\/304; nag\u0142\u00f3wek Age w odpowiedziach ze wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych; sp\u00f3jno\u015b\u0107 ETag\/Last-Modified i efekt Vary. W celu przeprowadzenia powtarzalnych test\u00f3w tymczasowo dezaktywuj\u0119 pami\u0119\u0107 podr\u0119czn\u0105 przegl\u0105darki lub korzystam z trybu prywatnego. Po stronie serwera oceniam dzienniki pod k\u0105tem stosunku 200\/304, \u015bredniego rozmiaru odpowiedzi i wykorzystania procesora. Sygna\u0142y ostrzegawcze to na przyk\u0142ad wiele odpowiedzi 200 na zasoby z kr\u00f3tkimi interwa\u0142ami zmian (brakuj\u0105ce walidatory), p\u0119tle ponownej walidacji (odbiegaj\u0105ce czasy \/ dryf zegara) lub niezwykle du\u017ca liczba wariant\u00f3w na adres URL (nadmierne Vary). U\u017cywam test\u00f3w obci\u0105\u017cenia, aby sprawdzi\u0107, jak s-maxage, stale-while-revalidate i if-none-match zachowuj\u0105 si\u0119 pod presj\u0105 - i dostosowuj\u0119 dyrektywy, a\u017c przepustowo\u015b\u0107 i op\u00f3\u017anienie b\u0119d\u0105 si\u0119 zgadza\u0107.<\/p>\n\n<h2>Przypadki brzegowe i solidne warto\u015bci domy\u015blne<\/h2>\n\n<p>Nie ka\u017cdy zas\u00f3b ma jasne zasady zmian. Ustawiam ostro\u017cne warto\u015bci domy\u015blne dla generowanych map witryn, kana\u0142\u00f3w lub pulpit\u00f3w nawigacyjnych: <em>no-cache<\/em> plus ETag\/Last-Modified. Przy niestabilnych zegarach mi\u0119dzy systemami upstream unikam sztywnych por\u00f3wna\u0144 sekundowych i preferuj\u0119 ETagi, kt\u00f3re s\u0105 niezale\u017cne od znacznik\u00f3w czasu. Je\u015bli kompresja jest zmienna (r\u00f3\u017cne poziomy gzip), uwzgl\u0119dniam wynik kompresji w generowaniu ETag\u00f3w lub prze\u0142\u0105czam si\u0119 na s\u0142abe ETagi. A je\u015bli klienci \u017c\u0105daj\u0105 bez walidator\u00f3w, wysy\u0142am wyra\u017ane sygna\u0142y: Albo wyra\u017an\u0105 \u015bwie\u017co\u015b\u0107 (max-age\/immutable) albo wyra\u017an\u0105 walidacj\u0119 (no-cache + ETag). Te <em>solidne ustawienia domy\u015blne<\/em> zapewniaj\u0105, \u017ce nawet niekompletni lub wadliwi klienci nie powoduj\u0105 niepo\u017c\u0105danych szczyt\u00f3w obci\u0105\u017cenia.<\/p>\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Po\u0142\u0105cz \u017c\u0105dania warunkowe <strong>Pr\u0119dko\u015b\u0107<\/strong> i terminowo\u015b\u0107, poniewa\u017c klienci pobieraj\u0105 kompletne zasoby tylko wtedy, gdy zawarto\u015b\u0107 uleg\u0142a zmianie. U\u017cywam kontroli pami\u0119ci podr\u0119cznej w celu zapewnienia \u015bwie\u017co\u015bci, \u0142\u0105cz\u0119 last-modified i ETag w celu niezawodnego sprawdzania i konsekwentnie odpowiadam 304, je\u015bli warunki s\u0105 spe\u0142nione. Izoluj\u0119 spersonalizowane i poufne tre\u015bci za pomoc\u0105 opcji private lub no-store, aby \u017cadne dane nie trafia\u0142y do wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych. Pomiary w DevTools, dzienniki i metryki pokazuj\u0105 mi, gdzie mog\u0119 wyd\u0142u\u017cy\u0107 terminy lub zaostrzy\u0107 logik\u0119 walidacji. Je\u015bli pomy\u015blisz o tych elementach razem, osi\u0105gniesz szybsze strony, mniejsze obci\u0105\u017cenie serwera i lepsze wyniki. <strong>zaokr\u0105glacz<\/strong> Do\u015bwiadczenie u\u017cytkownika bez marnowania danych.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak \u017c\u0105dania warunkowe HTTP i walidacja pami\u0119ci podr\u0119cznej za pomoc\u0105 ETag, Last-Modified i Cache-Control optymalizuj\u0105 buforowanie przegl\u0105darki i zwi\u0119kszaj\u0105 wydajno\u015b\u0107.<\/p>","protected":false},"author":1,"featured_media":19514,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-19521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"93","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"HTTP Conditional","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"19514","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/19521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=19521"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/19521\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/19514"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=19521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=19521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=19521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}