Отключить кеш браузера - PullRequest
       2

Отключить кеш браузера

3 голосов
/ 15 октября 2010

Я внедрил службу REST и использую веб-страницу в качестве клиента.На моей странице есть несколько функций javascript, которые несколько раз выполняют один и тот же http get-запрос к REST-серверу и обрабатывают ответы.

Моя проблема заключается в том, что браузер кэширует первый ответ и фактически не отправляет следующие запросы.

Есть ли способ заставить браузер выполнять все запросы без кэширования?Я использую Internet Explorer 8.0

Спасибо

Ответы [ 3 ]

8 голосов
/ 15 октября 2010

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

Таким образом, вместо:

http://my-server:8080/myApp/foo?bar=baz

Я буду использовать:

http://my-server:8080/myApp/foo?bar=baz&random=123456789

Конечно, значение random отличается для каждого запроса. Для этого вы можете использовать текущее время в миллисекундах.

7 голосов
/ 15 октября 2010

Не совсем.Это известная проблема IE, классическим решением является добавление случайного параметра в конце строки запроса для каждого запроса.Большинство библиотек JS делают это изначально, если вы попросите их (например, опция jQuery cache:false AJAX)

2 голосов
/ 15 октября 2010

Ну, разумеется, вы не хотите полностью отключать кеш браузера; Правильное кэширование является ключевой частью REST, и тот факт, что он может (при условии правильного соблюдения как клиентом, так и сервером) обеспечить высокую степень кэширования, а также дает точный контроль над истечением срока действия и повторной проверкой, является одним из ключевых преимуществ. 1001 *

Хотя, как вы заметили, существует проблема с последующими GET для того же URI из того же документа (как и в случае времени жизни документа DOM, перезагрузите страницу, и вы получите еще один шанс выполнить этот запрос XMLHttpRequest). Похоже, что IE воспринимает это так, как если бы запросил более одной копии одного и того же изображения или другого связанного ресурса на веб-странице; он использует кэшированную версию, даже если объект не кэшируется.

Firefox имеет противоположную проблему, и отправит последующий запрос, даже когда кэширующая информация говорит, что не должна!

Мы можем добавить случайный или фиктивный параметр с меткой времени в конце строки запроса для каждого запроса. Тем не менее, это немного похоже на крик "ЭТО СПАРТА!" и запихали нашу с трудом добытую загрузку в глубокую яму, которую ни один инспектор по охране труда и технике безопасности не подумал об установке защитной рейки Мы явно не хотим повторять полный безусловный запрос, когда нам это не нужно.

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

Следовательно, если два запроса могут находиться в пределах секунды друг от друга (либо мы знаем, что они вызываются из одной и той же функции, либо есть вероятность, что два события будут вызывать ее в последовательной последовательности), используя setTimeout для задержки второго запроса через секунду после завершения первого заставит его правильно использовать кеш, а не в двух разных видах некорректного поведения.

Конечно, задержка секунды - это задержка секунды. Это может быть большим делом или нет, в зависимости от размера загружаемого объекта.

Другая возможность состоит в том, что что-то, что изменяется так быстро, не должно моделироваться как GET-определение состояния ресурса вообще, а как POST-запрос к текущему состоянию ресурса. Это сильно пахнет злоупотреблением REST и POSTing, хотя это и должно быть GET.

Что может означать, что в конечном итоге подход THIS IS SPARTA добавления случайных элементов к строкам запроса - это путь. Это зависит, действительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...