Почему no-cache не запрещает браузеру хранить файл

В ответе сервера стоит Cache-Control: no-cache, а браузер всё равно сохранил файл. Это допустимое поведение HTTP-кеша. Настройка требует проверить сохранённую копию перед повторным использованием, поэтому само её наличие ещё не указывает на ошибку.

Что происходит при следующем запросе

Представим учебную ситуацию: браузер получил изображение с no-cache и меткой версии ETag. Позже ему снова понадобился этот ресурс. Он может отправить условный запрос с заголовком If-None-Match и полученной меткой.

Если версия совпадает, сервер отвечает 304 Not Modified. Содержимое файла заново не передаётся, браузер использует сохранённую копию после проверки. При изменении ресурса сервер может вернуть полный ответ 200 с новым содержимым. Конкретный ответ зависит от запроса и работы сервера; no-cache сам по себе не обещает код 304.

Когда нужен no-store

Директива Cache-Control: no-store запрещает HTTP-кешу сохранять полученный ответ. Это другой выбор политики хранения. Добавление такого заголовка не удаляет автоматически ранее сохранённые ответы по тому же адресу.

Поэтому перед настройкой стоит определить задачу: нужно проверять актуальность сохранённой копии или запретить хранение полученного ответа. Эти требования ведут к разным настройкам.

Что смотреть при проверке

Я бы начал с конкретного ресурса во вкладке Network инструментов разработчика. Проверил бы Cache-Control в ответе, наличие ETag, затем повторный запрос и его If-None-Match. Если пришёл 304, посмотрел бы, соответствует ли метка действительно неизменившейся версии. Это план диагностики, собственный замер здесь не приводится.

Если проверяете обычное поведение кеша, учитывайте настройку Disable cache: включённый флажок меняет условия проверки. Для сравнения полезно записать, был ли он включён.

Этот разбор относится к HTTP-кешу. Возврат кнопкой "Назад" может восстановить страницу из bfcache; у сайта с Service Worker также бывает отдельная логика хранения. Такие случаи требуют самостоятельной проверки.

Когда после обновления сайта видна старая картинка, один заголовок no-cache ещё не объясняет причину. Условный запрос, метка версии и фактический ответ помогают понять, на каком этапе возникло расхождение.

Источники: RFC 9111 "HTTP Caching", документация MDN по Cache-Control, ETag и HTTP-кешированию; справка Chrome DevTools по Network.

#ВебРазработка #Тестирование #ОптимизацияСайта

В каких случаях вам приходилось искать причину старой версии страницы или файла после обновления сайта?

Почему no-cache не запрещает браузеру хранить файл | Сетка — социальная сеть от hh.ru Почему no-cache не запрещает браузеру хранить файл | Сетка — социальная сеть от hh.ru
Почему no-cache не запрещает браузеру хранить файл | Сетка — социальная сеть от hh.ru Почему no-cache не запрещает браузеру хранить файл | Сетка — социальная сеть от hh.ru Почему no-cache не запрещает браузеру хранить файл | Сетка — социальная сеть от hh.ru