Ответ 1
В конце концов я понял это. Вот объяснение и проверенное решение.
Следующий сайт подтверждает мои наблюдения: http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
В нем говорится, что IE не хранит локально страницы с директивой no-cache и, следовательно, всегда отправляет безусловный запрос.
Есть также статья поддержки MS - https://support.microsoft.com/help/234067/ - которая подтверждает это:
"Internet Explorer поддерживает заголовок HTTP 1.1 Cache-Control, который предотвращает любое кэширование определенного веб-ресурса, если указано значение без кэширования..."
Такое поведение не является полностью неправильным - но это не то, что предназначено RFC 2616 (раздел 14.9.1). О "no-cache" говорится: "... кеш НЕ ДОЛЖЕН использовать ответ для удовлетворения последующего запроса без успешной повторной проверки на исходном сервере". Таким образом, ответ мОЖЕТ быть кэширован, но ДОЛЖЕН повторно подтвердить его. Основные браузеры, кроме IE, кэшируют ответ и повторно проверяют его. Чтобы предотвратить сохранение запроса, существует директива Cache-Control "no-store".
Таким образом, IE обрабатывает "no-cache" как "no-store".
А вот решение для согласованного включения условных запросов для IE и других браузеров:
Не используйте no-cache, но вместо этого установите заголовок Expires в прошлое (или -1, что имеет тот же эффект). IE, как и другие крупные браузеры, будет отправлять условные запросы. (Обратите внимание, что вам также следует знать об ошибке заголовка IE Vary, которая препятствует кешированию.)
Это критические поля заголовка:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, private
- Последнее изменение (или ETag) необходимо в качестве валидатора
- Истекает -1 говорит о том, что ресурс устарел и должен быть повторно проверен
- Cache-Control не должен содержать no-cache или no-store