Cache stron, CDN i banery zgody: jak nie serwować złego stanu zgody

Szybkie strony, zła zgoda

Cache stron to jedna z najlepszych rzeczy, jakie możesz zrobić dla szybkości i kosztów hostingu. To także jeden z najłatwiejszych sposobów na niezauważone zepsucie ustawień zgody. Cache robi dokładnie to, co mu każesz: zapisuje odpowiedź raz i serwuje ją każdemu, kto pasuje do tego samego klucza. Jeśli zapisana odpowiedź zawiera cokolwiek specyficznego dla wyboru zgody lub lokalizacji jednego odwiedzającego, dostanie to także następny.

Ten przewodnik obejmuje warstwy cache, które zwykle stoją przed witryną wydawcy — cache brzegowe CDN, wtyczki do pełnego cache stron, reverse proxy, service workery i samą przeglądarkę — oraz sposoby, jak uniemożliwić każdej z nich serwowanie złego doświadczenia zgody.

Podstawowa zasada: trzymaj zgodę poza cache’owanym HTML

Najbezpieczniejsza architektura renderuje cache’owaną stronę HTML jako neutralną wobec zgody. Strona zawiera loader CMP i Twoje tagi w stanie zablokowanym lub oczekującym, ale żadnej decyzji dotyczącej tego konkretnego odwiedzającego. CMP działa następnie w przeglądarce, odczytuje zapisany wybór, decyduje, czy pokazać baner, i odpowiednio zwalnia tagi.

Problemy zaczynają się, gdy serwer podejmuje decyzje o zgodzie w czasie renderowania, na przykład:

Gdy taka strona trafi do cache, stan pierwszego odwiedzającego staje się stanem wszystkich. Odwiedzający, który odrzucił śledzenie, może dostać stronę z już aktywnymi tagami, albo nowy odwiedzający może nigdy nie zobaczyć banera, bo cache’owana kopia pochodzi od kogoś, kto już go zamknął.

Dlaczego „Vary: Cookie” rzadko jest odpowiedzią

Podręcznikowa poprawka dla treści zależnych od odwiedzającego to polecenie, by cache różnicowały według nagłówka cookie. W praktyce odwiedzający mają wiele cookies o unikalnych wartościach, więc różnicowanie według całego nagłówka cookie zwykle sprowadza współczynnik trafień cache niemal do zera. Niektóre CDN pozwalają zbudować klucz cache z wartości pojedynczego cookie, co jest wykonalne, jeśli Twoje cookie zgody ma niewielką liczbę możliwych stanów, ale dodaje złożoności i nadal mnoży liczbę kopii w cache. Przeniesienie decyzji do przeglądarki jest prostsze i utrzymuje wydajność cache.

Geografia na brzegu

Wielu wydawców pokazuje różne banery w zależności od regionu: baner opt-in dla UE i Wielkiej Brytanii, informację o rezygnacji dla stanów USA i coś lżejszego gdzie indziej. Jeśli serwer wybiera wariant na podstawie adresu IP odwiedzającego, a strona jest cache’owana, europejski czytelnik może dostać cache’owaną stronę amerykańską lub odwrotnie.

Trzy wzorce temu zapobiegają:

  1. Geolokalizacja po stronie klienta. Pozwól CMP ustalić region w przeglądarce, aby cache’owany HTML pozostał taki sam dla wszystkich.
  2. Kraj w kluczu cache. Jeśli musisz decydować na brzegu, dołącz do klucza cache kod kraju dostarczany przez CDN. Otrzymujesz jedną kopię w cache na kraj, co jest przewidywalne.
  3. Niecache’owana logika brzegowa. Uruchom decyzję regionalną w funkcji brzegowej, która wstrzykuje niewielką niecache’owaną wartość do skądinąd cache’owanej strony.

Cokolwiek wybierzesz, udokumentuj to. Błędy geograficzne należą do najtrudniejszych do odtworzenia, bo pojawiają się tylko u odwiedzających z jednego miejsca, którzy akurat dostali stronę zbuforowaną przez kogoś z innego.

Cache’owanie samego skryptu CMP

Długie cache’owanie loadera CMP jest dobre dla wydajności, ale ma swoją cenę, gdy zmienia się konfiguracja. Jeśli zaktualizujesz dostawców, cele lub tekst banera, a skrypt lub plik konfiguracyjny jest cache’owany przez rok, część odwiedzających będzie nadal widzieć starą wersję. Sprawdź, jak Twoje CMP wersjonuje pliki: zmieniająca się nazwa pliku lub parametr wersji pozwala cache’ować agresywnie, a mimo to wdrażać zmiany natychmiast. Upewnij się też, że Twój własny CDN nie usuwa ciągów zapytań z adresów URL skryptów zewnętrznych, jeśli CMP na nich polega.

Service workery i cache offline

Witryny z warstwą aplikacji progresywnej często cache’ują HTML w service workerze. Obowiązuje ta sama zasada: nigdy nie zapisuj strony odzwierciedlającej konkretną decyzję o zgodzie. Wyklucz endpointy związane ze zgodą i strony centrum preferencji z cache’owania przez service worker i upewnij się, że zawsze można pobrać świeżą konfigurację CMP.

Cache wstecz/dalej

Nowoczesne przeglądarki trzymają niedawno odwiedzone strony w pamięci, aby przycisk wstecz przywracał je natychmiast. Jeśli odwiedzający otworzy centrum preferencji na jednej stronie, wycofa zgodę, a następnie naciśnie wstecz, przywrócona strona może nadal mieć uruchomione tagi sprzed zmiany. Nasłuchuj zdarzenia pageshow i sprawdzaj jego właściwość persisted: gdy strona jest przywracana z tego cache, ponownie odczytaj zapisany stan zgody i zatrzymaj lub uruchom tagi odpowiednio.

Procedura testowa

Najważniejsze wnioski

← Blog Czytaj wszystko →