Cache HTTP

Cache HTTP

Główną metodą pracy z użyciem HTTP jest pobieranie oraz zapisywanie zasobów z serwera. Najczęściej odczytujemy informacje, jednak z tym może wiązać się pewien problem. Pobieranie treści z serwera zawsze trwa pewien czas, w szczególności, jeżeli potrzebne jest przesłanie dużej ilości informacji. Może to powodować problemy z wydajnością zarówno ze strony klienta jak i serwera.
Klient musi pobierać wiele różnych informacji, aby je wykorzystać (np. zaprezentować). Z kolei serwer w przypadku podłączenia się do niego wielu klientów, może mieć problem z przepustowością łącz sieciowych. Nadmiarowy transfer jest także dodatkowym kosztem dla właścicieli serwerów, ponieważ część z nich jest rozliczana za gigabajty wykorzystanego transferu.
Warto zauważyć, że niektóre dane potrzebujemy pobierać wielokrotnie. Dobrym przykładem może tu być kod skryptu jQuery pobierany podczas każdego ładowania strony, która z niego korzysta. W wielu przypadkach zasób taki jest rzadko modyfikowany, więc nie musimy go za każdym razem pobierać z serwera. To jest sposób na zmniejszenie obciążenia sieci oraz skrócenie czasu przetwarzania zarówno po stronie klienta jak i serwera.
Cache HTTP jest to mechanizm lokalnego przechowywania wyników zapytań w celu ich późniejszego wykorzystania bez potrzeby ponownego pytania serwera. Mechanizm ten zarządza również kasowaniem przechowywanych odpowiedzi, które się zestarzały, oraz ich aktualizowaniem.
Przechowywana odpowiedź jest uznawana za aktualną, jeżeli może ona być wykorzystana bez ponownej walidacji zasobu.

Cache-not used

Każdy rekord przechowywany w cache jest identyfikowany na podstawie klucza. Odpowiada on parametrom wywołania, dla którego zapamiętana jest odpowiedź. Możliwe jest zachowywanie pełnych odpowiedzi, ale również przekierowań, informacji o błędach oraz częściowych odpowiedzi.
W przypadku korzystania z funkcjonalności negocjowania typu zawartości, może być przechowywane wiele wersji dla jednego zasobu, na przykład dla różnego typu lub języka.
Cache’owaniu mogą podlegać następujące metody:

  • GET,
  • POST – tylko przy użyciu nagłówków Cache-Control lub Expires,
  • HEAD – może być wykorzystywany do sprawdzania aktualności zachowanych obiektów.

W przypadku korzystania z zapytań typu GET w niektórych przypadkach potrzebne jest spełnienie dodatkowych warunków:

  • dla częściowych odpowiedzi wymagana jest obsługa nagłówków Range oraz Content-Range,
  • zapytania zawierające informacje autoryzacyjne (nagłówek Authorization) nie mogą być przechowywane.

Powyżej przedstawione zostały ogólne zasady działania mechanizmu cache. Konkretnymi zaś jego aspektami zajmiemy się później.