HTTP Cache - проверка с сервером, всегда отправка if-Modified-Since

У меня есть ресурс, который создается пользователем и поэтому изменяется в непредсказуемое время (например, пользователь загружает новую версию документа Word). Я хотел бы, чтобы браузеры кэшировали этот ресурс и проверяли его кеш с сервером на каждый запрос (т.е. Всегда отправляли заголовок 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 request.

Я думаю, дело в том, что если IE имеет дату истечения срока действия, он не видит причин спрашивать вас, был ли ресурс изменен, поскольку его кешированная копия должна быть "достаточно хорошей".

На странице также говорится, что IE поддерживает Cache-control: no-cache, хотя это не рекомендуется. Похоже, что это должно сработать, но в любом случае попробуйте использовать Expires.

Кроме того, другой googling говорит мне, что браузеры, как ожидается, отправят If-Modified-Since вообще, так что, возможно, почему Firefox работает. Попробуйте удалить Cache-Control: no-cache, чтобы убедиться, что Firefox по-прежнему ведет себя правильно.