CDN wyjaśniony: co robi sieć dostarczania treści | We.Inc
Jak CDN kopiuje Twoje pliki na serwery brzegowe blisko odwiedzających, co oznaczają cache hit i cache miss oraz które nagłówki Cache-Control decydują, co serwer brzegowy może przechowywać.
Sieć dostarczania treści (CDN) to zbiór serwerów rozmieszczonych na całym świecie, które przechowują kopie plików Twojej strony. Odwiedzającym odpowiada pobliski serwer brzegowy zamiast Twojego originu, więc strony ładują się z krótszym czekaniem, a Twój własny serwer obsługuje znacznie mniej żądań. Nagłówki Cache-Control decydują, co serwer brzegowy może przechowywać.
Pojęcia CDN, każde w jednej linii
Pojęcie
Znaczenie
Origin
Twój własny serwer lub magazyn, gdzie znajdują się prawdziwe pliki
Edge
Serwer CDN blisko odwiedzającego, który odpowiada w imieniu originu
Cache hit
Serwer brzegowy miał już świeżą kopię i odpowiedział bez pytania originu
Cache miss
Serwer brzegowy nie miał nic użytecznego, pobrał plik z originu i być może go zapisał
Purge
Polecenie dla CDN, aby usunął zapisane kopie, dzięki czemu następne żądanie pobierze nowe
W internecie odległość kosztuje czas: każde nowe połączenie wymaga kilku rund wymiany, zanim dotrze pierwszy bajt. CDN skraca te rundy, odpowiadając z miejsca blisko czytelnika. Ten przewodnik wyjaśnia, jak to działa, czego CDN nie potrafi i jak Twoje nagłówki nim sterują, z symulatorem do wypróbowania.
Wybierz w symulatorze dyrektywy Cache-Control, aby zobaczyć, czy przeglądarka i serwer brzegowy CDN mogą przechować odpowiedź i jak długo.
Skopiuj wynikową linię nagłówka do konfiguracji swojego serwera lub hostingu.
Przeczytaj tabelę referencyjną, aby dobrać rozsądne wartości dla HTML, zasobów z hashem i stron prywatnych.
Po wdrożeniu wyczyść cache CDN lub polegaj na nowych nazwach plików, aby odwiedzający dostali aktualizację.
Dodawaj do nazw plików hash zawartości, na przykład app.3f9a1c.js, i cache'uj je przez rok z immutable. Nowy build tworzy nowe nazwy, więc nic nieaktualnego nie jest serwowane.
Trzymaj HTML z krótkim czasem życia we wspólnym cache albo go rewaliduj, bo jego URL nigdy nie zmienia się między wydaniami.
Nigdy nie pozwalaj CDN przechowywać stron z danymi konta jednej osoby. Oznacz je jako private lub no-store.
Ładowanie biblioteki z publicznego CDN nie oszczędza już ponownego pobrania: przeglądarki dzielą teraz cache osobno dla każdej strony ze względu na prywatność.
Najczęściej zadawane pytania
Czy CDN przyspiesza każdą stronę?
Zwykle tak, dla odwiedzających daleko od Twojego serwera, bo rundy wymiany są krótsze, a połączenia nawiązywane w pobliżu. Może jednak dodać koszt, gdy wprowadza dodatkową domenę do wyszukania i połączenia, dlatego serwowanie wszystkiego z własnej domeny przez CDN jest lepsze niż mieszanie hostów.
Czym jest s-maxage?
To dyrektywa Cache-Control ustawiająca czas świeżości tylko dla współdzielonych cache, takich jak CDN. Na serwerze brzegowym nadpisuje max-age, a przeglądarki nadal używają max-age, więc możesz pozwolić serwerowi brzegowemu trzymać stronę przez godzinę, a przeglądarce przez minutę.
Czy CDN może cache'ować strony dynamiczne?
Tak, jeśli odpowiedź jest taka sama dla wszystkich. Nawet kilka sekund cache może wchłonąć skok ruchu. Odpowiedzi różniące się dla każdego zalogowanego użytkownika nie mogą być przechowywane we współdzielonym cache.
Czy CDN to ryzyko bezpieczeństwa?
To kolejna strona na drodze Twoich treści. Jeśli ładujesz skrypty z zewnętrznego CDN, dodaj hash Subresource Integrity, aby przeglądarka odrzuciła zmieniony plik.
Czy muszę sam dodać CDN?
Wiele platform hostingowych już serwuje opublikowane strony przez CDN. Przeczytaj dokumentację swojego hostingu, zanim dołożysz drugi, bo dwie warstwy cache utrudniają czyszczenie i debugowanie.
Co dzieje się przy żądaniu
Resolver odwiedzającego zwraca adres pobliskiego serwera brzegowego. Serwer brzegowy sprawdza, czy ma ten URL w swoim magazynie. Przy trafieniu odpowiada od razu; przy chybieniu pyta Twój origin, przekazuje odpowiedź dalej i zachowuje kopię, jeśli pozwalają na to nagłówki.
Serwery brzegowe utrzymują też otwarte, rozgrzane połączenia z originem, więc nawet chybienie jest często szybsze niż łączenie się odwiedzającego z Twoim serwerem z drugiego końca świata.
Czego CDN nie naprawi
Wolne zapytania do bazy, ciężki JavaScript i zbyt duże obrazy są wolne także wtedy, gdy serwuje je serwer brzegowy. CDN usuwa odległość, a nie pracę.
Dodaje też jeszcze jeden element, który może zawieść. Gdy CDN ma awarię, dotyka ona każdej strony za nim, więc warto mieć strony statusu i plan na taki przypadek.
Dyrektywy Cache-Control, które mają znaczenie na brzegu
Co każda dyrektywa mówi przeglądarkom i CDN
Dyrektywa
Przeglądarka
Serwer brzegowy CDN
max-age=N
Świeże przez N sekund
Świeże przez N sekund, chyba że ustawiono s-maxage
s-maxage=N
Ignorowane
Świeże przez N sekund, nadpisuje max-age
Może przechować
Może przechować, nawet z nagłówkiem Authorization
Może przechować
Nie może przechować
Nie może przechować
Nie może przechować
Pomija rewalidację, dopóki jest świeże
Pomija rewalidację, dopóki jest świeże
stale-while-revalidate=N
Może serwować nieaktualne przez N sekund podczas odświeżania
To samo, jeśli CDN to obsługuje
Przepisy na nagłówki według typu pliku
Trzy popularne polityki
Zasoby z hashem żyją przez rok, HTML odświeża się na brzegu co minutę, a strony kont nigdy nie trafiają do współdzielonego cache.
Symulator Cache-Control
Wybierz dyrektywy i zobacz, kto może zachować odpowiedź.
max-age (sekundy)
s-maxage (sekundy, puste, jeśli brak)
Udostępnianie
Public, private lub no-store
Dodaj immutable
Przeglądarka
Serwer brzegowy CDN
Może przechować, świeże przez {n} s
Nie może przechować
Może przechować, ale przed ponownym użyciem musi sprawdzić z serwerem