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ść.
