HTTP Cache - проверяйте с сервером, всегда отправляя If-Modified-Since
У меня есть ресурс, который генерируется пользователем и поэтому изменяется в непредсказуемое время (например, пользователь загружает новую версию текстового документа). Я хотел бы, чтобы браузеры кэшировали этот ресурс и проверяли его кэш с сервером при каждом запросе (т.е. всегда отправляли заголовок If-Modified-Since).
Из тестирования я обнаружил, что Firefox обрабатывает это соответствующим образом, когда я использую "Cache-Control: no-cache" в заголовке ответа. Однако Internet Explorer 7 не отправляет "If-Modified-Since" в своем заголовке запроса.
Достиг ли "Cache-Control: no-cache" того, что я описал в начале? Если нет, могу ли я что-то сделать по-другому, чтобы добиться того, что я описал в разных браузерах?
Благодарю.
1 ответ
Согласно Microsoft ( http://support.microsoft.com/kb/234067), вам нужно установить заголовок Expires для -1, чтобы это работало должным образом в Internet Explorer.
Со страницы:
Во многих случаях веб-серверы имеют одну или несколько изменчивых страниц на сервере, которые содержат информацию, которая может быть изменена немедленно. Эти страницы должны быть помечены сервером со значением "-1" для заголовка Expires. По будущим запросам пользователя Internet Explorer обычно связывается с веб-сервером для обновления этой страницы с помощью условного запроса If-Modified-Since.
Я думаю, что дело в том, что если у IE есть срок действия, он не видит причин спрашивать вас, был ли изменен ресурс, поскольку его кэшированная копия должна быть "достаточно хорошей".
На странице также сказано, что IE поддерживает Cache-control: no-cache, хотя это и не рекомендуется. Похоже, это должно сработать, но все равно попробуйте Expires.
Кроме того, другие поиски в Google говорят мне, что браузеры должны отправлять If-Modified-Since в общем, поэтому, возможно, именно поэтому Firefox работает. Попробуйте удалить Cache-Control: no-cache, чтобы увидеть, продолжает ли Firefox работать правильно.