Да, ответ с датой истечения срока действия в будущем будет считаться свежим до даты истечения срока действия:
В поле заголовка объекта Expires указывается дата / время, после которого ответ считается устаревшим. [...]
Наличие поля заголовка Expires со значением даты в будущем в ответе, который в противном случае по умолчанию не кэшируется, указывает на то, что ответ кэшируется, если иное не указано в поле заголовка Cache-Control ( раздел 14,9 ).
Обратите внимание, что дата истечения более одного года в будущем может интерпретироваться как никогда не истекает :
Чтобы пометить ответ как «никогда не истекает», сервер отправителя отправляет дату истечения срока действия примерно через год с момента отправки ответа. Серверы HTTP / 1.1 НЕ ДОЛЖНЫ отправлять даты окончания срока действия более одного года в будущем.
Таким образом, если в кеше хранится ответ, он, вероятно, примет ответ из кеша даже без повторной проверки кэшированного ответа перед его отправкой.
Теперь, если вы измените ресурс, который уже хранится в кешах и еще свеж, нет способа сделать их недействительными :
[…] хотя они могут оставаться «свежими», они не точно отражают то, что сервер отправителя вернул бы для нового запроса на этот ресурс.
Протокол HTTP не может гарантировать, что все такие записи кэша помечены как недействительные. Например, запрос, вызвавший изменение на исходном сервере, возможно, не прошел через прокси, где хранится запись в кэше.
Это причина того, почему такие бесконечные ресурсы используют уникальный номер версии в URL (например, style-v123.css
), который изменяется при каждом обновлении. Это также то, что я рекомендую в этом случае.
Кстати, объявление ответа с помощью Cache-Control как public ничего не делает в этом случае. Это используется только в том случае, если ответ, требующий авторизации, должен быть кэширован:
public - указывает, что ответ МОЖЕТ быть кеширован любым кешем, даже если он обычно не кешируется или кешируется только в не кешируемом кеше. (См. Также Авторизация, , раздел 14.8 , для получения дополнительной информации.)
Для получения дополнительной информации о кэшировании HTTP: