Nodea — logo

Cache-Control

Cache-Control to nagłówek protokołu HTTP, za pomocą którego serwer określa zasady buforowania odpowiedzi: czy wolno ją zapisać w pamięci podręcznej, komu (tylko przeglądarce czy również serwerom pośredniczącym), na jak długo oraz jak weryfikować jej świeżość. To podstawowe narzędzie sterowania wydajnością — poprawnie skonfigurowany cache potrafi wyeliminować większość zbędnych zapytań do serwera.

Jak działa Cache-Control?

Nagłówek składa się z dyrektyw rozdzielonych przecinkami, np. Cache-Control: public, max-age=31536000, immutable. Najważniejsze z nich to:

  • max-age=N — czas świeżości odpowiedzi w sekundach (odpowiednik TTL); po jego upływie klient musi zapytać serwer o nową wersję;
  • s-maxage=N — osobny czas świeżości dla pamięci współdzielonych, np. CDN i reverse proxy;
  • public / private — czy odpowiedź mogą przechowywać cache współdzielone, czy wyłącznie przeglądarka użytkownika;
  • no-cache — zapis dozwolony, ale każde użycie wymaga rewalidacji (nagłówki ETag / Last-Modified);
  • no-store — całkowity zakaz zapisu, właściwy dla danych wrażliwych;
  • immutable — obietnica, że zasób nigdy się nie zmieni w okresie świeżości;
  • stale-while-revalidate — pozwala podać przeterminowaną odpowiedź, odświeżając ją w tle.

Zastosowanie w praktyce

Typowa strategia dzieli zasoby na dwie grupy. Pliki statyczne z odciskiem wersji w nazwie (CSS, JS, fonty, grafiki) dostają długi max-age i immutable — zmiana treści oznacza nową nazwę pliku, więc nie ma ryzyka podania nieaktualnej wersji. Dokumenty HTML i odpowiedzi API otrzymują krótki czas świeżości albo no-cache z rewalidacją, dzięki czemu publikacja zmian jest widoczna niemal natychmiast.

Nagłówki ustawia się w konfiguracji serwera WWW (Apache — moduł mod_headers i .htaccess, Nginx — dyrektywa add_header) lub w aplikacji. Na hostingu współdzielonym zwykle wystarczy odpowiedni wpis w pliku .htaccess, a efekt łatwo zweryfikować w zakładce Network narzędzi deweloperskich przeglądarki.

Powiązane pojęcia

Najczęstsze pytania

Czym różni się no-cache od no-store?

Dyrektywa no-cache pozwala zapisać odpowiedź w pamięci podręcznej, ale przed każdym użyciem wymaga rewalidacji na serwerze (np. przez ETag). No-store całkowicie zakazuje zapisywania odpowiedzi — stosuje się ją do danych wrażliwych, jak strony bankowości czy panele użytkownika.

Jak długo cache'ować pliki statyczne?

Zasoby z wersjonowanymi nazwami (np. app.3f9a2c.js) można buforować nawet rok z dyrektywą immutable, bo każda zmiana pliku generuje nowy adres URL. Dokumenty HTML lepiej oznaczać krótkim max-age lub no-cache, aby użytkownicy szybko widzieli aktualną treść.