Почему 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.
#ВебРазработка #Тестирование #ОптимизацияСайта
В каких случаях вам приходилось искать причину старой версии страницы или файла после обновления сайта?