Cache oparty na czasie

Cache oparty na czasie

Walidatory

Wyróżniamy 2 rodzaje walidatorów zasobów:

  • silne – występują wtedy, gdy każda zmiana zawartości zasobu powoduje wykrycie zmiany w walidatorze
  • słabe – gdy wykrywanie zmian w walidatorze opiera się na danych niezależnych od wartości zasobu (np. na informacjach o czasie)

Zgodnie z powyższą definicja wyróżniamy dwa rodzaje cache’a:

Cache oparty na czasie

Polega on na tym, że przechowywany zasób może być używany tylko przez zdefiniowany czas. Do tego celu używany jest nagłówek: Last-Modified, który wskazuje na datę ostatniej modyfikacji zasobu.

Last-Modified: Tue, 15 Nov 2015 12:45:26 GMT

Data ta jest zapamiętywana razem z rekordem i podczas wysłania następnego zapytania GET lub HEAD, dodawany jest warunkowy nagłówek sprawdzający, czy data ta się zmieniła

If-Modified-Since: Tue, 15 Nov 2015 12:45:26 GMT

Jeżeli zasób nie został od tego czasu zmieniony zwrócony zostanie zasób przechowywany w cache ze statusem 304 (Not Modified)

Nagłówek ten jest używany w następujących przypadkach:

  • aby umożliwić działanie cache opartym na wartościach czasowych
  • aby ograniczyć zakres przeglądania zasobów sieciowych tylko do rekordów zmienionych od czasu poprzedniego zapytania

cache oparty na czasie

Istnieje także nagłówek If-Unmodified-Since, który powoduje przesłanie treści zasobu tylko gdy nie został on zmodyfikowany od pewnego momentu. Nie jest on bezpośrednio wykorzystywany przez cache, ale ma 2 zastosowania:

  • gdy pobieramy pewien zasób partiami, przy pobieraniu kolejnej cześć chcemy się upewnić, czy nie został on zmodyfikowany i pobieramy cały czas ten sam zasób
  • dla zapytań modyfikujących rekord (np. PUT) możemy w ten sposób zaimplementować mechanizm sprawdzania czy rekord nie został w międzyczasie przz kogoś zmieniony i czy nie chcemy zaktualizować go bazując na nieaktualnej wersji. Jest to rozwiązanie problemu równoczesnego wykorzystywania zasobów.