Есть ли способ отключить кэширование клиентского браузера для определенных сайтов?

10

Это независимый от браузера вопрос, но мы тестируем с IE9.

Одно из веб-приложений, которое посещают наши пользователи, кэшируется случайным образом, и изменения не отображаются, когда они должны. Ни на одном другом сайте такой проблемы нет, и мы работали с поставщиком, который утверждает, что этого не происходит ни с кем другим. Если мы используем панель инструментов разработчика и выбираем «принудительное обновление с сервера», все обновляется правильно.

Вместо того, чтобы по-настоящему решить проблему, мы думаем обойти ее, отключив кеш для этого конкретного сайта. Однако мы не знаем как.

GollyJer
источник

Ответы:

10

Единственный правильный способ отключения кэширования в браузере - это заголовки HTTP из самого веб-приложения. Заголовок HTTP 1.1 «Cache-Control» должен быть достаточен для любого браузера после 2000 года. Но для дополнительной защиты сервер может выдавать заголовки HTTP 1.1 «Cache-Control» и HTTP 1.0 «Expires» вместе .

Хакерский, но иногда встречающийся способ обработки аннулирования кэша - это строка «cachebuster» в URL-адресах с сервера. Кешбастер часто основан на отметке времени и добавляется в виде строки запроса в каждую HTML-ССЫЛКУ, чтобы сделать URL-адрес уникальным и использоваться только один раз. Нечто подобное http://example.org/filename.html?cb=<timestamp+random_value>. Это уродливо и ничего не делает, заголовки HTTP не намного лучше. Но его можно использовать как взлом для ограниченной аудитории (например, в Интранете) или как дополнительный уровень защиты вместе с правильными заголовками HTTP.

AFAIK нет способа выборочно отключить кэширование для одного сайта только из Internet Explorer. Одно (чертовски сложное) решение может состоять в том, чтобы установить кэш Varnish в качестве промежуточного кеша в вашей локальной сети, настроить Internet Explorer на использование Varnish в качестве прокси-сервера HTTP и использовать язык VCL на Varnish для перезаписи заголовков HTTP только для этого конкретного сайта.

Честно говоря, я думаю, что ваш продавец делает ошибку здесь. Я бы предложил установить Fiddler2 для IE или Firebug для Firefox и посмотреть фактические заголовки HTTP, которые отправляет веб-приложение. Сопоставьте это с уроком кэширования Марка Ноттингема, на который я уже ссылался выше - я предполагаю, что заголовки разрешают кэширование или, по крайней мере, явно не запрещают кэширование.

Джеспер М
источник
0

Убедитесь, что вы установили правильные заголовки expire. Если вы поместите время в прошлое, содержимое не будет кэшироваться. Проверьте время / дату на рабочей станции, где работает IS9. Смотрите также: http://www.mnot.net/cache_docs/

Мирча Вуцовичи
источник
0

Если вы не можете изменить содержимое веб-сайта, о котором идет речь, вы можете использовать прокси-сервер для изменения содержимого на своем браузере. Это позволит вам изменить заголовки expire.

JeffG
источник
0

Если веб-сайт позволяет подключаться через HTTPS, то в зависимости от браузера вы можете отключить кэширование зашифрованных страниц.

В IE это можно сделать так:

Вы можете дважды проверить настройки IE в Свойства обозревателя-> Дополнительно-> Безопасность-> Не сохранять зашифрованные страницы на диск.

JeffG
источник
Он попросил решение, не зависящее от браузера.
Мирча Вутцовичи
1
@Mircea Это IS агностик решение браузера. Я только что предоставил бесплатный пример использования IE. Многие другие браузеры имеют возможность отключить кэширование SSL, но настройки находятся в разных местах.
JeffG
0
<meta http-equiv="PRAGMA" content="NO-CACHE">

http://www.zann-marketing.com/developer/20051018/stop-browser-caching-using-meta-tags.html

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

Ричард
источник
Это сработало бы, если бы GollyJer имел возможность изменять сайт. Я полагаю, что он не основывается на своем вопросе.
JeffG
Если быть точным, «случайные ключи» не могут эффективно предотвратить кеширование. Браузер и промежуточные кэши могут по-прежнему хранить ответ на диске. Но в следующий раз, когда запрашивается тот же файл, случайный ключ изменит URL-адрес, и поэтому кэшированная версия на диске не будет использоваться. Новое представление будет загружено с сервера и, возможно, кэшировано на диск. Кроме того, тег META PRAGMA устарел и не должен использоваться - рекомендуется использовать заголовки HTTP Expires и Cache-Control.
Jesper M