Budulianin Wrote:
-------------------------------------------------------
> Большое спасибо за ответ, теперь понял.
>
> А если браузер присылает в запросе Cache-Control: no-cache(или
> max-age=0), что часто бывает, а я хочу отдавать кэш, мне как-то
> игнорировать этот заголовок или если из приложения будет ответ с
> Cache-Control: max-age=600, то в браузере в любом случае сохранится
> кэш?
Браузер в запросе будет присылать Cache-Control: no-cache, только если вы нажали F5 (обновления страницы), браузер говорит что юзер хочет получить новый контент, но при этом браузер высылает и If-Modified-Since, что означает что имеете право не отдавать контент если его версия не изменилась а просто отдать 304 статус и браузер будет использовать контент из своего кеша.
Проще говоря вы можете игнорировать Cache-Control: no-cache из запроса, если приходит If-Modified-Since, нл можете и не игнорировать, все зависит от задачи и бизнес логики приложения.
> Получается, что Cache-Control: max-age=315360000 опасно отдавать, если
> не уверен на 100% что ничего не будет меняться. Как потом отменить
> этот кэш? Если не менять URI.
>
> Добавлять версию скорее всего не получится, значит нужно задавать
> небольшой max-age даже для статики?
Да, если вы не можете менять uri контента, тогда придется указывать небольшой max-age и проводить ревалидацию.
В этом случаи приложения должно уметь очень быстро проверять If-Modified-Since с текущим Last-Modified, если они равны отдавать 304, если нет отдавать новый контент и статус 200.
Если приложения будет тормозить при ревалидации, тогда смысла от кеширования мало, потому что юзера будут получать задержку, приложения занимать ресурсы сервера.
В общем надо делать молниеносную ревалидацию в приложении )