Отключить кеширование браузера в пилонах - PullRequest
2 голосов
/ 13 марта 2010

У меня есть действие / json, которое возвращает json с сервера.

К сожалению, в IE браузеру нравится кэшировать этот json.

Как сделать так, чтобы это действие не кэшировалось?

Ответы [ 4 ]

3 голосов
/ 14 марта 2010

Убедитесь, что заголовки вашего ответа имеют:

Cache-Control: no-cache
Pragma: no-cache
Expires=-1
2 голосов
/ 14 марта 2010

Убедитесь, что ваши ответы не сообщают браузеру, что срок действия контента истекает в будущем. Элемент управления this имеет два заголовка HTTP.

  1. Истекает
  2. Cache-Control - есть много возможных значений для этого заголовка, но тот, который контролирует срок действия, является max-age = foo.

Кроме того, IE может проходить повторную проверку. Это означает, что IE включает в запрос некоторую дополнительную информацию, которая сообщает веб-серверу, какую версию ресурса он имеет в своем кэше. Если кешированная версия браузера является текущей, ваш сервер может ответить 304 Not Modified и НЕ включать содержимое в ответы. «Условия запроса GET» включают эту информацию о версиях. Возможно, ваш сервер дает 304 ответа, а это не должно быть.

Существует два набора заголовков, которые контролируют повторную проверку:

  1. Последнее изменение + If-Modified-Since
  2. ETag + If-None-Match

Last-Modified и ETag - это заголовки ответа, которые сообщают браузеру, какую версию ресурса он собирается получить. Если вы не хотите, чтобы браузеры проходили повторную проверку, не устанавливайте их. If-Modified-Since и If-None-Match - это соответствующие заголовки запросов, которые браузер использует для сообщения о версии устаревшего ресурса, который необходимо повторно проверить на сервере.

Существуют различные инструменты для просмотра заголовков HTTP, которые ваш сервер отправляет обратно в браузер. Одним из них является расширение Firefox Live HTTP Headers . Еще один инструмент, который Стив Саундерс рекомендует - это IBM Page Detailer . Я сам не пробовал, но это не зависит от используемого вами браузера.

1 голос
/ 11 октября 2010

Библиотека jQuery имеет довольно приятные функции ajax и настройки для управления ими. Один из них называется «кеш», и он автоматически добавляет к запросу случайное число, которое, по сути, заставляет браузер не кэшировать страницу. Это может быть установлено вместе с параметром "dataType", который может быть установлен в "json", чтобы запрос ajax получал данные json. Я использовал это в своем коде и у меня не было проблем с IE.

Надеюсь, это поможет

1 голос
/ 14 марта 2010

Это распространенная проблема - IE кэширует все запросы ajax / json на стороне клиента. Другие браузеры этого не делают.

Чтобы обойти это, сгенерируйте случайное число и добавьте его к URL-адресу вашего запроса в качестве переменной. Это заставляет IE думать, что это новый запрос.

Вот пример в javascript, вы можете сделать нечто подобное в Python:

function rand() {
    return Math.floor(Math.random()*100000);
}

$("#content").load("/posts/view/1?rand="+rand());
...