Я пытаюсь рассчитывать на кеш браузера
Данные JSON, возвращаемые вызовами AJAX в jQuery.
Нормальная активность браузера постоянно зависит от кеша браузера.
Пример: изображения jpg и gif не перезагружаются при перезагрузке страницы.
Но когда я пытаюсь использовать jQuery getJSON ajax-вызовы, я не могу избежать загрузки данных с сервера.
Мои возвращенные заголовки выглядят так (подтверждено firebug):
Transfer-Encoding: chunked
Date: Wed, 05 Aug 2009 02:55:39 GMT
Content-Type: text/plain; charset=ISO-8859-1
Expires: Wed, 05 Aug 2009 03:55:39 GMT
Cache-Control: max-age=3600
Однако немедленное обновление страницы приводит к тому, что идентичные запросы попадают на сервер.
Я видел несколько сообщений о том, как избежать кеширования, а это не то, что мне нужно.
Я видел несколько сообщений об использовании кэширования, но все они, кажется, полагаются
после сохранения данных в DOM. Я хочу что-то, что ведет себя так же, как кэшированные изображения во время перезагрузки страницы.
Может ли браузер просто извлечь его из собственного кэша?
- x - x - x - x ОБНОВЛЕНИЕ --x - x - x -
К моему большому разочарованию, некоторые уважаемые люди соглашаются, что это не просто возможно.
Некоторые даже утверждают, что это не должно быть (что все еще сбивает меня с толку).
Стабберн до отказа, я попробовал следующее:
Я установил заголовок Etag на всех исходящих страницах, которые я хочу кэшировать.
(Я выбираю несколько аргументов URL выбора, которые представляют запрашиваемые мной данные, и просто использую их для значения Etag)
В начале следующего запроса я просто проверяю, присутствует ли в запросе заголовок If-None-Match. Если это так, то браузер не кэширует запрос так, как я хотел, поэтому я отправил ответ 304 Not Modified.
Тестирование показывает, что Firefox не будет кэшировать мой запрос
(но я все еще могу избежать части «извлечь дорогие данные» моего cgi),
в то время как IE6 фактически кеширует его (и даже не будет пытаться получить обратно с сервера).
Это не очень хороший ответ, но сейчас он работает для меня
(эти вредные полностраничные обновления графических данных теперь не будут такими медленными или дорогими).
(Что? Я использую IE6! Боже! О, смотри, белка!)