HTTP Cache -
why / when / how ?
Paweł Mikołajczuk, Biała Podlaska 20.04.2017
The least expensive query
is the query you never run
Rodzaje Cache’u
Przyjmijmy że Cache === Pamięć podręczna
Browser Cache Proxy/Gateway Cache
Dane składowane po stronie
przeglądarki/użytkownika.
Najczęściej widoczne po kliknięciu przycisku
wstecz lub kolejnym wyświetleniu
poprzednio odwiedzanej strony.
Nie współdzielone z innymi użytkownikami
Dane przechowywane w pamięci specjalnej
aplikacji umiejscowionej pomiędzy
użytkownikiem a serwerem.
Często nazywane również “reverse proxy
caches” lub “surrogate caches”
Współdzielone z innymi użytkownikami
Browser Cache Proxy/Gateway Cache
Bezpieczne Metody
HTTP Cache działa tylko z “bezpiecznymi” metodami jak : GET, HEAD
● Nie próbuj zapisywać do pamięci podręcznej żądań wysyłanymi metodami
PUT, POST czy DELETE. Te metody są przeznaczone do zmiany stanu twojej
aplikacji (np. usuwanie wpisu na blogu). Zapisywanie ich w pamięci
podręcznej mogłoby spowodować nieprawidłowe działanie twojej
aplikacji.
● Nie powinieneś nigdy zmieniać stanu swoje aplikacji (np. zmieniać lub
usuwać wpis na blogu) poprzez żądania metodami GET lub HEAD. Jeśli
żądania tymi metodami będą zapisywane do pamięci podręcznej to mogą
nigdy nie dotrzeć do twojego serwera.
Jak zezwolić na “cachowanie”
twoich odpowiedzi?
HTTP określa cztery nagłówki (cache) odpowiedzi których
możesz użyć żeby aktywować “cachowanie”.
● Cache-Control (PUBLIC | PRIVATE | NO-CACHE | NO-STORE) -
więcej: http://bit.ly/mdn-cache-control
● Expires (Fri, 30 Oct 1998 14:19:41 GMT)
● ETag (33a64df551425fcc55e4d42a148795d9f25f89d4)
● Last-Modified (Wed, 15 Nov 1995 04:58:08 GMT)
Great caching is like great sex.
It hides all the real problems.
Vivek Haldar
Say hello to Varnish
Varnish jest akceleratorem HTTP, pracującym w trybie reverse proxy (czyli przy serwerze www).
Jego działanie opiera się na cache, storage typu klucz/wartość, w którym trzymany jest kod
wygenerowany i zaserwowany przez serwer www obsługujący daną aplikację webową. Kluczem
obiektów w cache zazwyczaj jest adres URL. Źródło: http://www.unity.pl/na-blogu/varnish/
Cache Invalidation
Czyszczenie pamięci podręcznej
There are only two hard things in
Computer Science:
cache invalidation and naming things.
Phil Karlton
Cache Invalidation in Varnish
● Żądanie PURGE prosi Varnisha o usunięcie danego zasobu wraz z wszystkimi jego wariantami
zapisanymi w nagłówku (Vary). Alternatywnym podejściem jest ignorowanie nagłówka Vary i
odświeżanie zasobu przy żądaniu PURGE (Varnish czyści swój cache i automatycznie pobiera nową
kopię z serwera).
W wielu aplikacjach ta sama treść jest używana na wieli różnych stronach o różnych adresach URL. Dla takich
przypadków istnieją bardziej elastyczne rozwiązania:
● Banowanie (BAN) - usuwa zasoby pasujące do wyrażenia regularnego lub innych kryteriów.
● Tagowanie - umożliwia oznaczenie każdego zasobu wybranym tagiem i czyszczenie wszystkich
zasobów oznaczonych tym tagiem.
Co z dynamicznymi
elementami na stronie?
ESI (Edge Side Includes)
Edge Side Includes jest językiem który pozwala na
załączanie fragmentów strony w treści innych stron.
Można myśleć o tym jako o HTML’owej wersji include
która działa w HTTP.
W większości stron www dużo treści jest współdzielone
pomiędzy stronami. Generowanie tej treści dla każdej z
nich to marnotrawstwo zasobów i ESI próbuje
zniwelować ten problem pozwalając na ustawianie
polityki cache dla tych fragmentów indywidualnie.
There is just
ONE MORE THING
HTTP/2 Server Push
Server push pozwala na wysłanie zasobów do użytkownika zanim
przeglądarka o nie zapyta.
Przykładowe użycia:
● Wysyłanie plików css i js wymaganych do pierwszego wyświetlanie
strony
● Wysyłanie pełnych zawartości stron (np. z boksów “podobne
artykuły”).
Must Read
RFC 2616 http://tools.ietf.org/html/rfc2616
HTTP caching: – http://tools.ietf.org/html/rfc2616#section-13

Http cache - kiedy/dlaczego/jak

  • 1.
    HTTP Cache - why/ when / how ? Paweł Mikołajczuk, Biała Podlaska 20.04.2017
  • 2.
    The least expensivequery is the query you never run
  • 3.
    Rodzaje Cache’u Przyjmijmy żeCache === Pamięć podręczna Browser Cache Proxy/Gateway Cache Dane składowane po stronie przeglądarki/użytkownika. Najczęściej widoczne po kliknięciu przycisku wstecz lub kolejnym wyświetleniu poprzednio odwiedzanej strony. Nie współdzielone z innymi użytkownikami Dane przechowywane w pamięci specjalnej aplikacji umiejscowionej pomiędzy użytkownikiem a serwerem. Często nazywane również “reverse proxy caches” lub “surrogate caches” Współdzielone z innymi użytkownikami
  • 4.
  • 5.
    Bezpieczne Metody HTTP Cachedziała tylko z “bezpiecznymi” metodami jak : GET, HEAD ● Nie próbuj zapisywać do pamięci podręcznej żądań wysyłanymi metodami PUT, POST czy DELETE. Te metody są przeznaczone do zmiany stanu twojej aplikacji (np. usuwanie wpisu na blogu). Zapisywanie ich w pamięci podręcznej mogłoby spowodować nieprawidłowe działanie twojej aplikacji. ● Nie powinieneś nigdy zmieniać stanu swoje aplikacji (np. zmieniać lub usuwać wpis na blogu) poprzez żądania metodami GET lub HEAD. Jeśli żądania tymi metodami będą zapisywane do pamięci podręcznej to mogą nigdy nie dotrzeć do twojego serwera.
  • 6.
    Jak zezwolić na“cachowanie” twoich odpowiedzi? HTTP określa cztery nagłówki (cache) odpowiedzi których możesz użyć żeby aktywować “cachowanie”. ● Cache-Control (PUBLIC | PRIVATE | NO-CACHE | NO-STORE) - więcej: http://bit.ly/mdn-cache-control ● Expires (Fri, 30 Oct 1998 14:19:41 GMT) ● ETag (33a64df551425fcc55e4d42a148795d9f25f89d4) ● Last-Modified (Wed, 15 Nov 1995 04:58:08 GMT)
  • 7.
    Great caching islike great sex. It hides all the real problems. Vivek Haldar
  • 8.
    Say hello toVarnish Varnish jest akceleratorem HTTP, pracującym w trybie reverse proxy (czyli przy serwerze www). Jego działanie opiera się na cache, storage typu klucz/wartość, w którym trzymany jest kod wygenerowany i zaserwowany przez serwer www obsługujący daną aplikację webową. Kluczem obiektów w cache zazwyczaj jest adres URL. Źródło: http://www.unity.pl/na-blogu/varnish/
  • 9.
    Cache Invalidation Czyszczenie pamięcipodręcznej There are only two hard things in Computer Science: cache invalidation and naming things. Phil Karlton
  • 10.
    Cache Invalidation inVarnish ● Żądanie PURGE prosi Varnisha o usunięcie danego zasobu wraz z wszystkimi jego wariantami zapisanymi w nagłówku (Vary). Alternatywnym podejściem jest ignorowanie nagłówka Vary i odświeżanie zasobu przy żądaniu PURGE (Varnish czyści swój cache i automatycznie pobiera nową kopię z serwera). W wielu aplikacjach ta sama treść jest używana na wieli różnych stronach o różnych adresach URL. Dla takich przypadków istnieją bardziej elastyczne rozwiązania: ● Banowanie (BAN) - usuwa zasoby pasujące do wyrażenia regularnego lub innych kryteriów. ● Tagowanie - umożliwia oznaczenie każdego zasobu wybranym tagiem i czyszczenie wszystkich zasobów oznaczonych tym tagiem.
  • 11.
    Co z dynamicznymi elementamina stronie? ESI (Edge Side Includes)
  • 14.
    Edge Side Includesjest językiem który pozwala na załączanie fragmentów strony w treści innych stron. Można myśleć o tym jako o HTML’owej wersji include która działa w HTTP. W większości stron www dużo treści jest współdzielone pomiędzy stronami. Generowanie tej treści dla każdej z nich to marnotrawstwo zasobów i ESI próbuje zniwelować ten problem pozwalając na ustawianie polityki cache dla tych fragmentów indywidualnie.
  • 15.
  • 16.
    HTTP/2 Server Push Serverpush pozwala na wysłanie zasobów do użytkownika zanim przeglądarka o nie zapyta. Przykładowe użycia: ● Wysyłanie plików css i js wymaganych do pierwszego wyświetlanie strony ● Wysyłanie pełnych zawartości stron (np. z boksów “podobne artykuły”).
  • 19.
    Must Read RFC 2616http://tools.ietf.org/html/rfc2616 HTTP caching: – http://tools.ietf.org/html/rfc2616#section-13