Вот что я наконец понял.Большинство библиотек javascript, в том числе jQuery, YUI, Mootools и Prototype, отправляют заголовок X-Requested-With: XmlHttpRequest
при каждом запросе ajax.
Для любого запроса, отправляющего этот заголовок, вы можете отправить заголовок ответа, который сообщает емуне кэшировать.
Ниже представлен фильтр Grails, который предотвращает кэширование ajax-запросов, идентифицирующих себя с заголовком X-Requested-With: XmlHttpRequest
:
// put this class in grails-app/config/
class AjaxFilters {
def filters = {
all(controller:'*', action:'*') {
before = {
if (request.getHeader('X-Requested-With')?.equals('XMLHttpRequest')) {
response.setHeader('Expires', '-1')
}
}
}
}
}
Некоторые люди предпочитают использовать Cache-Control:заголовок без кэша вместо срока действия.Вот разница:
- Cache-Control: no-cache - абсолютно НЕТ кеширования
- Срок действия: -1 - браузер "обычно "связывается с веб-сервером для обновления этой страницы с помощью условного запроса If-Modified-Since.Однако страница остается в дисковом кеше и используется в соответствующих ситуациях, не связываясь с удаленным веб-сервером, например, когда кнопки BACK и FORWARD используются для доступа к истории навигации или когда браузер находится в автономном режиме.
Добавляя этот фильтр, вы делаете кеширование Internet Explorer совместимым с тем, что уже делают Firefox и Safari.
Кстати, у меня возникла проблема с кешированием в IE8 и IE9.Я предполагаю, что проблема существовала и для IE7 и IE6.