{"id":54566,"date":"2019-12-29T00:00:00","date_gmt":"2019-12-28T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj"},"modified":"2020-02-18T14:02:35","modified_gmt":"2020-02-18T11:02:35","slug":"samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","title":{"rendered":"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>W ostatnich latach coraz wi\u0119cej platform do optymalizacji projekt\u00f3w frontendowych oferuje mo\u017cliwo\u015b\u0107 samodzielnego hostingu lub proxy dla zasob\u00f3w zewn\u0119trznych. Akamai pozwala ustawi\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/community.akamai.com\/customers\/s\/article\/5-ways-to-prevent-slow-3rd-party-front-end-services?language=en_US\">specyficzne parametry<\/a><\/noindex> dla samodzielnie tworzonych URL. Cloudflare ma technologi\u0119 Edge Workers. Fasterzine mo\u017ce <noindex><a rel=\"nofollow\" href=\"https:\/\/www.fasterize.com\/en\/blog\/https-the-impact-on-your-loading-times\/\">przepisywa\u0107<\/a><\/noindex> URL na stronach, tak aby wskazywa\u0142y na zewn\u0119trzne zasoby znajduj\u0105ce si\u0119 na g\u0142\u00f3wnym domenie strony.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/481574\/\"><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/61f87db89ba8c5f4bf030a4004df56f3.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Je\u015bli wiadomo, \u017ce zewn\u0119trzne us\u0142ugi u\u017cywane w Twoim projekcie nie zmieniaj\u0105 si\u0119 zbyt cz\u0119sto i \u017ce proces ich dostarczania do klient\u00f3w mo\u017ce by\u0107 ulepszony, to z pewno\u015bci\u0105 rozwa\u017casz proxy dla takich us\u0142ug. Przy takim podej\u015bciu mo\u017cesz w pe\u0142ni \"przybli\u017cy\u0107\" te zasoby do u\u017cytkownik\u00f3w i uzyska\u0107 wi\u0119ksz\u0105 kontrol\u0119 nad ich buforowaniem po stronie klienta. To r\u00f3wnie\u017c chroni u\u017cytkownik\u00f3w przed problemami wywo\u0142anymi \"awari\u0105\" zewn\u0119trznej us\u0142ugi lub degradacj\u0105 jej wydajno\u015bci.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Zaleta: poprawa wydajno\u015bci<\/h2>\n<p>\nSamodzielny hosting zasob\u00f3w zewn\u0119trznych poprawia wydajno\u015b\u0107 w ca\u0142kowicie oczywisty spos\u00f3b. Przegl\u0105darka nie musi dodatkowo si\u0119ga\u0107 do DNS, nie musi nawi\u0105zywa\u0107 po\u0142\u0105czenia TCP i przeprowadza\u0107 negocjacji TLS na zewn\u0119trznej domenie. To, jak samodzielny hosting zasob\u00f3w zewn\u0119trznych wp\u0142ywa na wydajno\u015b\u0107, mo\u017cna zobaczy\u0107, por\u00f3wnuj\u0105c dwa nast\u0119puj\u0105ce rysunki.<\/p>\n<p><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/ee0a0ccb712a873d10b8de0dbc7ef84a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zewn\u0119trzne zasoby s\u0105 \u0142adowane z zewn\u0119trznych \u017ar\u00f3de\u0142 (\u017ar\u00f3d\u0142o <noindex><a rel=\"nofollow\" href=\"https:\/\/csswizardry.com\/2019\/05\/self-host-your-static-assets\/\">st\u0105d<\/a><\/noindex>)<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/e9ee0b858dbb1aa7c6476d8bf954fc62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zewn\u0119trzne zasoby s\u0105 przechowywane w tym samym miejscu, co pozosta\u0142e materia\u0142y strony (\u017ar\u00f3d\u0142o <noindex><a rel=\"nofollow\" href=\"https:\/\/csswizardry.com\/2019\/05\/self-host-your-static-assets\/\">st\u0105d<\/a><\/noindex>)<\/i><\/p>\n<p>Sytuacj\u0119 poprawia r\u00f3wnie\u017c fakt, \u017ce przegl\u0105darka b\u0119dzie wykorzystywa\u0107 mo\u017cliwo\u015bci multiplexingu i priorytetyzacji danych z po\u0142\u0105czenia HTTP\/2, kt\u00f3re ju\u017c zosta\u0142o nawi\u0105zane z g\u0142\u00f3wn\u0105 domen\u0105.<\/p>\n<p>Je\u015bli nie hostujesz zasob\u00f3w zewn\u0119trznych na swoim serwerze, b\u0119d\u0105 one \u0142adowane z domeny r\u00f3\u017cnej od g\u0142\u00f3wnej, co uniemo\u017cliwi ich priorytetyzacj\u0119. To spowoduje, \u017ce b\u0119d\u0105 konkurowa\u0107 ze sob\u0105 o przepustowo\u015b\u0107 klienta. Mo\u017ce to prowadzi\u0107 do tego, \u017ce czas \u0142adowania materia\u0142\u00f3w, kt\u00f3re s\u0105 krytyczne dla formowania strony, oka\u017ce si\u0119 znacznie d\u0142u\u017cszy ni\u017c czas mo\u017cliwy do osi\u0105gni\u0119cia w idealnych okoliczno\u015bciach. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=nOW-i6bbRdo\">Oto<\/a><\/noindex> wyst\u0105pienie na temat priorytetyzacji HTTP\/2, w kt\u00f3rym wszystko to jest bardzo dobrze wyja\u015bnione.<\/p>\n<p>Mo\u017cna przypuszcza\u0107, \u017ce u\u017cycie w linkach do zewn\u0119trznych zasob\u00f3w atrybut\u00f3w <code>preconnect<\/code> pomo\u017ce w rozwi\u0105zaniu problemu. Jednak je\u015bli takich link\u00f3w do r\u00f3\u017cnych domen b\u0119dzie zbyt wiele, mo\u017ce to rzeczywi\u015bcie przeci\u0105\u017cy\u0107 lini\u0119 komunikacyjn\u0105 w najwa\u017cniejszym momencie.<\/p>\n<p>Je\u015bli hostujesz zewn\u0119trzne zasoby samodzielnie \u2014 mo\u017cesz kontrolowa\u0107, w jaki spos\u00f3b te zasoby s\u0105 udost\u0119pniane klientowi. M\u00f3wi\u0105c dok\u0142adniej, chodzi o to:<\/p>\n<ul>\n<li>Mo\u017cna zapewni\u0107 zastosowanie algorytmu kompresji danych, najlepiej dopasowanego do ka\u017cdej przegl\u0105darki (Brotli\/gzip).<\/li>\n<li>Mo\u017cna zwi\u0119kszy\u0107 czas cache'owania zasob\u00f3w, kt\u00f3ry zazwyczaj, nawet w przypadku najbardziej znanych dostawc\u00f3w, nie jest zbyt d\u0142ugi (na przyk\u0142ad odpowiednia warto\u015b\u0107 dla tagu GA ustawiona jest na 30 minut).<\/li>\n<\/ul>\n<p>\nMo\u017cna nawet wyd\u0142u\u017cy\u0107 wska\u017anik TTL dla zasobu, na przyk\u0142ad do roku, w\u0142\u0105czaj\u0105c odpowiednie materia\u0142y w swoj\u0105 strategi\u0119 zarz\u0105dzania pami\u0119ci\u0105 podrzeczn\u0105 (hash URL, wersjonowanie i tak dalej). O tym porozmawiamy poni\u017cej.<\/p>\n<h3>\u258dOchrona przed przerwami w dzia\u0142aniu zewn\u0119trznych us\u0142ug lub ich wy\u0142\u0105czeniem<\/h3>\n<p>\nInny interesuj\u0105cy aspekt samodzielnego hostingu zewn\u0119trznych zasob\u00f3w polega na tym, \u017ce pozwala to z\u0142agodzi\u0107 ryzyko zwi\u0105zane z przerwami w dzia\u0142aniu zewn\u0119trznych us\u0142ug. Za\u0142\u00f3\u017cmy, \u017ce u\u017cywane zewn\u0119trzne rozwi\u0105zanie do przeprowadzania test\u00f3w A\/B jest realizowane w postaci blokuj\u0105cego skryptu, \u0142adowanego w sekcji nag\u0142\u00f3wkowej strony. Ten skrypt \u0142adowany jest wolno. Je\u015bli odpowiedni skrypt nie uda si\u0119 za\u0142adowa\u0107 \u2014 strona b\u0119dzie pusta. Je\u015bli jego \u0142adowanie zajmie bardzo du\u017co czasu \u2014 strona pojawi si\u0119 z du\u017cym op\u00f3\u017anieniem. Lub za\u0142\u00f3\u017cmy, \u017ce w projekcie u\u017cywana jest biblioteka, \u0142adowana z zewn\u0119trznego zasobu CDN. Wyobra\u017amy sobie, \u017ce ten zas\u00f3b dozna\u0142 awarii lub zosta\u0142 zablokowany w jakim\u015b kraju. Taka sytuacja spowoduje zak\u0142\u00f3cenie logiki dzia\u0142ania strony.<\/p>\n<p>Aby dowiedzie\u0107 si\u0119, jak dzia\u0142a Twoja strona w warunkach braku dost\u0119pno\u015bci jakiejkolwiek zewn\u0119trznej us\u0142ugi, mo\u017cesz skorzysta\u0107 z sekcji SPOF na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.webpagetest.org\/\">webpagetest.org<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/0ffa0b44054ccd16bab33c6b7beff049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Sekcja SPOF na webpagetest.org<\/i><\/p>\n<h3>\u258dCo z problemami z pami\u0119ci\u0105 podr\u0119czn\u0105 materia\u0142\u00f3w w przegl\u0105darkach? (podpowied\u017a: to mit)<\/h3>\n<p>\nMo\u017cna pomy\u015ble\u0107, \u017ce korzystanie z publicznych CDN automatycznie prowadzi do lepszej wydajno\u015bci zasob\u00f3w, poniewa\u017c us\u0142ugi te posiadaj\u0105 wystarczaj\u0105cej jako\u015bci sieci i s\u0105 rozproszone na ca\u0142ym \u015bwiecie. Ale w rzeczywisto\u015bci wszystko jest nieco bardziej skomplikowane.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce mamy kilka r\u00f3\u017cnych stron internetowych: website1.com, website2.com, website3.com. Na wszystkich tych stronach u\u017cywana jest biblioteka jQuery. Pod\u0142\u0105czamy j\u0105 do nich korzystaj\u0105c z CDN, na przyk\u0142ad \u2014 googleapis.com. Mo\u017cna oczekiwa\u0107, \u017ce przegl\u0105darka raz za\u0142adowuje i buforuje bibliotek\u0119, a nast\u0119pnie u\u017cywa jej w pracy ze wszystkimi trzema stronami. To mog\u0142oby zmniejszy\u0107 obci\u0105\u017cenie sieci. Mo\u017ce to pozwoli\u0107 na pewne oszcz\u0119dno\u015bci i poprawi\u0107 wydajno\u015b\u0107 zasob\u00f3w. Z praktycznego punktu widzenia wygl\u0105da to jednak inaczej. Na przyk\u0142ad w Safari wprowadzono mo\u017cliwo\u015b\u0107, zwan\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/webkit.org\/blog\/7675\/intelligent-tracking-prevention\/\">Intelligent Tracking Prevention<\/a><\/noindex>: w pami\u0119ci podr\u0119cznej u\u017cywane s\u0105 podw\u00f3jne klucze, oparte na \u017ar\u00f3dle dokumentu i \u017ar\u00f3dle zasobu zewn\u0119trznego. <noindex><a rel=\"nofollow\" href=\"https:\/\/andydavies.me\/blog\/2018\/09\/06\/safari-caching-and-3rd-party-resources\/\">Oto<\/a><\/noindex> dobry artyku\u0142 na ten temat.<\/p>\n<p>Stare badania <noindex><a rel=\"nofollow\" href=\"https:\/\/yuiblog.com\/blog\/2007\/01\/04\/performance-research-part-2\/\">Yahoo<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/code.facebook.com\/posts\/964122680272229\/web-performance-cache-efficiency-exercise\/\">Facebook<\/a><\/noindex>, a tak\u017ce nowsze <noindex><a rel=\"nofollow\" href=\"https:\/\/discuss.httparchive.org\/t\/analyzing-resource-age-by-content-type\/1659\">badanie<\/a><\/noindex> Pola Calvano pokazuj\u0105, \u017ce zasoby nie s\u0105 przechowywane w pami\u0119ciach podr\u0119cznych przegl\u0105darek tak d\u0142ugo, jak mogliby\u015bmy si\u0119 tego spodziewa\u0107: \u201eIstnieje powa\u017cna rozbie\u017cno\u015b\u0107 mi\u0119dzy czasem buforowania w\u0142asnych i zewn\u0119trznych zasob\u00f3w projektu. M\u00f3wi si\u0119 o CSS i czcionkach internetowych. Zw\u0142aszcza, \u017ce czas buforowania 95% w\u0142asnych czcionek przekracza tydzie\u0144, podczas gdy czas buforowania 50% zewn\u0119trznych czcionek wynosi mniej ni\u017c tydzie\u0144! To daje deweloperom internetowym solidne powody do samodzielnego hostowania plik\u00f3w czcionek!\u201d<\/p>\n<p>W rezultacie, je\u015bli b\u0119dziesz hostowa\u0107 obce materia\u0142y, nie zauwa\u017cysz problem\u00f3w z wydajno\u015bci\u0105 spowodowanych buforowaniem w przegl\u0105darkach.<\/p>\n<p>Teraz, gdy om\u00f3wili\u015bmy mocne strony samodzielnego hostowania zasob\u00f3w zewn\u0119trznych, porozmawiajmy o tym, jak odr\u00f3\u017cni\u0107 dobr\u0105 realizacj\u0119 tego podej\u015bcia od z\u0142ej.<\/p>\n<h2>Z\u0142a: diabe\u0142 tkwi w szczeg\u00f3\u0142ach<\/h2>\n<p>\nPrzeniesienie zasob\u00f3w zewn\u0119trznych na w\u0142asn\u0105 domen\u0119 nie mo\u017ce by\u0107 wykonane automatycznie, nie dbaj\u0105c o prawid\u0142owe buforowanie tych zasob\u00f3w.<\/p>\n<p>Jednym z g\u0142\u00f3wnych problem\u00f3w jest czas buforowania. Na przyk\u0142ad informacje o wersjach s\u0105 zawierane w nazwach skrypt\u00f3w zewn\u0119trznych w mniej wi\u0119cej taki spos\u00f3b: <code>jquery-3.4.1.js<\/code>. Taki plik w przysz\u0142o\u015bci nie zmieni si\u0119, w zwi\u0105zku z czym nie spowoduje \u017cadnych problem\u00f3w z jego buforowaniem.<\/p>\n<p>Jednak je\u015bli nie stosuje si\u0119 \u017cadnego schematu wersjonowania przy pracy z plikami, buforowane skrypty, kt\u00f3rych zawarto\u015b\u0107 zmienia si\u0119 przy niezmienionej nazwie pliku, mog\u0105 sta\u0107 si\u0119 nieaktualne. Mo\u017ce to sta\u0107 si\u0119 powa\u017cnym problemem, poniewa\u017c na przyk\u0142ad uniemo\u017cliwia automatyczne wprowadzanie poprawek zabezpiecze\u0144 w skryptach, kt\u00f3re klienci powinny otrzyma\u0107 jak najszybciej. Programista b\u0119dzie musia\u0142 podj\u0105\u0107 wysi\u0142ek, aby zaktualizowa\u0107 takie skrypty w buforze. Ponadto mo\u017ce to spowodowa\u0107 awarie aplikacji, poniewa\u017c kod u\u017cywany po stronie klienta z bufora r\u00f3\u017cni si\u0119 od \u015bwie\u017cej wersji kodu, na kt\u00f3r\u0105 opiera si\u0119 cz\u0119\u015b\u0107 serwerowa projektu.<\/p>\n<p>Jednak m\u00f3wi\u0105c o materia\u0142ach, kt\u00f3re s\u0105 cz\u0119sto aktualizowane (mened\u017cerowie tag\u00f3w, rozwi\u0105zania do test\u00f3w A\/B), ich buforowanie w systemach CDN to zadanie co prawda wykonalne, ale znacznie bardziej skomplikowane. Serwisy takie jak Commanders Act, rozwi\u0105zania do zarz\u0105dzania tagami, przy publikacji nowych wersji korzystaj\u0105 z webhook\u00f3w. To umo\u017cliwia zorganizowanie wyczyszczenia bufora w CDN, lub co jeszcze lepsze, mo\u017cliwo\u015b\u0107 wywo\u0142ania aktualizacji hasha lub wersji URL.<\/p>\n<h3>\u258dAdaptacyjne wydawanie materia\u0142\u00f3w klientom<\/h3>\n<p>\nPonadto, gdy m\u00f3wimy o buforowaniu, nale\u017cy r\u00f3wnie\u017c uwzgl\u0119dni\u0107 fakt, \u017ce ustawienia buforowania stosowane na CDN mog\u0105 nie by\u0107 odpowiednie dla pewnych zasob\u00f3w zewn\u0119trznych. Na przyk\u0142ad takie zasoby mog\u0105 stosowa\u0107 technologi\u0119 sniffingu agenta u\u017cytkownika (user agent sniffing, adaptive serving), aby dostarcza\u0107 wersje materia\u0142\u00f3w zoptymalizowane specjalnie dla tych przegl\u0105darek. Technologie te, aby ustali\u0107 mo\u017cliwo\u015bci przegl\u0105darki, polegaj\u0105 na wyra\u017ceniach regularnych lub bazie danych, w kt\u00f3rej zebrane s\u0105 informacje o nag\u0142\u00f3wkach HTTP. <code>User-Agent<\/code>. Dowiaduj\u0105c si\u0119, z jak\u0105 przegl\u0105dark\u0105 maj\u0105 do czynienia, przekazuj\u0105 jej materia\u0142y zaprojektowane specjalnie dla niej.<\/p>\n<p>Mo\u017cna tutaj przypomnie\u0107 sobie dwa serwisy. Pierwszy to googlefonts.com. Drugi to polyfill.io. Serwis Google Fonts dostarcza, dla pewnego zasobu, r\u00f3\u017cny kod CSS, w zale\u017cno\u015bci od mo\u017cliwo\u015bci przegl\u0105darki (podaj\u0105c linki do zasob\u00f3w w formacie woff2, u\u017cywaj\u0105c <code>unicode-range<\/code>).<\/p>\n<p>Oto wyniki kilku zapyta\u0144 do Google Fonts, wykonanych z r\u00f3\u017cnych przegl\u0105darek.<\/p>\n<p><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/5078ce754cc324e42261a1749e96a445.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wynik zapytania do Google Fonts, wykonany z Chrome<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/103de3c523a05fdfa230ada49842f124.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wynik zapytania do Google Fonts, wykonany z IE10<\/i><\/p>\n<p>Polyfill.io przesy\u0142a przegl\u0105darkom tylko te polifile, kt\u00f3re s\u0105 potrzebne. Zrobione jest to z powod\u00f3w wydajno\u015bci.<\/p>\n<p>Na przyk\u0142ad, przyjrzyjmy si\u0119, co si\u0119 stanie, gdy wykonamy nast\u0119puj\u0105ce zapytanie z r\u00f3\u017cnych przegl\u0105darek: <noindex><a rel=\"nofollow\" href=\"https:\/\/polyfill.io\/v3\/polyfill.js?features=default\">https:\/\/polyfill.io\/v3\/polyfill.js?features=default<\/a><\/noindex><\/p>\n<p>W odpowiedzi na takie zapytanie, wykonane z IE10, przyjdzie 34 kB danych. A odpowied\u017a na nie, wykonana z Chrome, b\u0119dzie pusta.<\/p>\n<h2>Z\u0142e: kilka kwestii dotycz\u0105cych prywatno\u015bci<\/h2>\n<p>\nTen punkt jest ostatni w kolejno\u015bci, ale nie mniej wa\u017cny. Chodzi o to, \u017ce samodzielne hostowanie zewn\u0119trznych zasob\u00f3w na g\u0142\u00f3wnym domenie projektu lub na jego poddomenie mo\u017ce zagrozi\u0107 prywatno\u015bci u\u017cytkownik\u00f3w i negatywnie wp\u0142yn\u0105\u0107 na g\u0142\u00f3wny projekt internetowy.<\/p>\n<p>Je\u015bli tw\u00f3j system CDN jest \u017ale skonfigurowany, mo\u017ce to sko\u0144czy\u0107 si\u0119 tym, \u017ce wy\u015blesz pliki cookie swojej domeny do zewn\u0119trznego serwisu. Je\u015bli na poziomie CDN nie b\u0119dzie zorganizowanej odpowiedniej filtracji, twoje sesyjne pliki cookie, kt\u00f3re w normalnych warunkach nie mog\u0105 by\u0107 u\u017cywane w JavaScripcie (z atrybutem <code>httponly<\/code>), mog\u0105 zosta\u0107 wys\u0142ane do obcego hosta.<\/p>\n<p>To mo\u017ce si\u0119 w\u0142a\u015bnie zdarzy\u0107 z trackerami takimi jak Eulerian czy Criteo. Zewn\u0119trzne trackery mog\u0142y umieszcza\u0107 unikalny identyfikator w plikach cookie. Je\u015bli by\u0142y cz\u0119\u015bci\u0105 materia\u0142\u00f3w na stronach, mog\u0142y odczytywa\u0107 identyfikator wed\u0142ug w\u0142asnego uznania w trakcie korzystania przez u\u017cytkownika z r\u00f3\u017cnych zasob\u00f3w internetowych.<\/p>\n<p>Dzi\u015b wi\u0119kszo\u015b\u0107 przegl\u0105darek zawiera zabezpieczenia przed takim zachowaniem tracker\u00f3w. W rezultacie teraz trackery wykorzystuj\u0105 technologi\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/nextdns\/cname-cloaking-the-dangerous-disguise-of-third-party-trackers-195205dc522a\">CNAME Cloaking<\/a><\/noindex>, ukrywaj\u0105c si\u0119 pod w\u0142asnymi skryptami r\u00f3\u017cnych projekt\u00f3w. A dok\u0142adnie, trackery proponuj\u0105 w\u0142a\u015bcicielom stron dodanie do swoich ustawie\u0144 CNAME dla pewnej domeny, kt\u00f3rej adres zwykle wygl\u0105da jak losowy ci\u0105g znak\u00f3w.<\/p>\n<p>Chocia\u017c nie jest zalecane, aby pliki cookie witryny by\u0142y dost\u0119pne dla wszystkich poddomen (np. *.website.com), to na wielu stronach si\u0119 to robi. W takim przypadku takie pliki cookie s\u0105 automatycznie wysy\u0142ane do zamaskowanego zewn\u0119trznego trackera. W rezultacie o jakiejkolwiek prywatno\u015bci nie mo\u017cna ju\u017c m\u00f3wi\u0107.<\/p>\n<p>Ponadto to samo dzieje si\u0119 z nag\u0142\u00f3wkami HTTP <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/web\/updates\/2015\/09\/automating-resource-selection-with-client-hints\">Client-Hints<\/a><\/noindex>, kt\u00f3re s\u0105 wysy\u0142ane tylko do g\u0142\u00f3wnej domeny, poniewa\u017c mog\u0105 by\u0107 u\u017cywane do tworzenia <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/httpwg\/http-extensions\/issues\/767\">odcisku cyfrowego<\/a><\/noindex> u\u017cytkownika. Upewnij si\u0119, \u017ce u\u017cywana przez Ciebie us\u0142uga CDN odpowiednio filtruje podobne nag\u0142\u00f3wki.<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nJe\u015bli zamierzasz wkr\u00f3tce wdro\u017cy\u0107 samodzielne hostowanie zasob\u00f3w zewn\u0119trznych \u2014 pozw\u00f3l, \u017ce podziel\u0119 si\u0119 kilkoma wskaz\u00f3wkami:<\/p>\n<ul>\n<li>Hostuj najwa\u017cniejsze biblioteki JS, czcionki i pliki CSS na swoich serwerach. Zmniejszy to ryzyko awarii strony lub spadku jej wydajno\u015bci w wyniku niedost\u0119pno\u015bci zasob\u00f3w niezb\u0119dnych do dzia\u0142ania strony z winy zewn\u0119trznej us\u0142ugi.<\/li>\n<li>Zanim zbuforujesz zasoby zewn\u0119trzne na CDN, upewnij si\u0119, \u017ce w nazewnictwie ich plik\u00f3w u\u017cywana jest jaka\u015b system wersjonowania, lub masz mo\u017cliwo\u015b\u0107 zarz\u0105dzania cyklem \u017cycia tych zasob\u00f3w, r\u0119cznie lub automatycznie czyszcz\u0105c pami\u0119\u0107 podr\u0119czn\u0105 CDN przy publikacji nowej wersji skryptu.<\/li>\n<li>Bardzo dok\u0142adnie podchod\u017a do ustawie\u0144 CDN, serwera proxy i pami\u0119ci podr\u0119cznej. Pomo\u017ce to unikn\u0105\u0107 wysy\u0142ania plik\u00f3w cookie projektu lub nag\u0142\u00f3wk\u00f3w <code>Client-Hints<\/code> do zewn\u0119trznych us\u0142ug.<\/li>\n<\/ul>\n<p>\n<b>Drodzy Czytelnicy!<\/b> Czy umieszczasz na swoich serwerach cudze materia\u0142y, kt\u00f3re s\u0105 niezwykle wa\u017cne dla dzia\u0142ania Twoich projekt\u00f3w?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\"><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/30212b2008a5ed0b51a4469d885b9e91.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\/#order\"><img decoding=\"async\" alt=\"Samodzielne hostowanie zewn\u0119trznych zasob\u00f3w: dobre, z\u0142e, z\u0142owrogie\" src=\"\/wp-content\/uploads\/2019\/12\/7117788d4bd0ef7de47d98a372b72ae7.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/481574\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. Akamai \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 URL. \u0423 Cloudflare \u0435\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Edge Workers. Fasterzine \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c URL \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u0431\u044b \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u0441\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54566","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-28T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Samodzielne hostowanie zasob\u00f3w zewn\u0119trznych: dobre, z\u0142e, brzydkie | ProHoster","description":"W ostatnich latach coraz wi\u0119cej platform do optymalizacji projekt\u00f3w frontendowych oferuje mo\u017cliwo\u015bci samodzielnego hostowania lub proxy dla zasob\u00f3w zewn\u0119trznych.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster","og:description":"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-28T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54566","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:52:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:02:46","updated":"2026-08-11 12:50:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=54566"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54566\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=54566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=54566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=54566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}