Запросы кэша AJAX

Я отправляю AJAX GET-запросы в PHP-приложение и хотел бы кэшировать возвращаемые запросы для последующего использования.

Поскольку я использую GET, это должно быть возможно, потому что разные запросы запрашивают разные URL-адреса (например, getHTML.php? Page = 2 и getHTML.php? Page = 5).

Какие заголовки мне нужно объявить в PHP-приложении, чтобы обеспечить правильное использование кэша URL-адресов клиентов браузером браузера? Мне нужно объявить что-либо в Javascript, который обрабатывает AJAX-запрос (я использую функцию $ .ajax jQuery, у которой есть параметр кэша)?

Как я могу обрабатывать изменения, которые изменяют содержимое, например, getHTML.php? Page = 2, чтобы клиент не возвращался в кешированную версию? Добавление другого параметра в запрос GET, например getHTML.php? Page = 2 & version = 2, невозможно, потому что ссылка на запрошенный URL создается автоматически без какой-либо проверки (что предпочтительнее, чем я хочу, чтобы она была).

Как браузер реагирует при попытке AJAX-запросить URL-адрес кэшированного запроса? Сможет ли AJAX-запрос немедленно вернуться к успеху?

благодаря

Willem

Добавьте на сервер следующие заголовки:

header("Cache-Control: private, max-age=$seconds"); header("Expires: ".gmdate('r', time()+$seconds)); 

Где $ seconds имеет очевидный смысл.

Кроме того, проверьте, нет ли на вашем сервере каких-либо других заголовков анти-кэширования, таких как Pragma. Если это так, добавьте заголовок Pragma: cache.

Как только вы обновите страницу, вы все равно будете делать серверные вызовы для контента, даже если вы уже запрашивали их. Заголовки PHP не помогут вам.

Я думаю, что вам нужен механизм кэширования на стороне клиента, уже запрошенный с сервера на текущей странице.

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

Вот пример:

 //placeholder for hash table as cache var cache = []; var getPage = function(pageNr){ if(cache[pageNr]){ //content is already in cache, use it from there handleContent(cache[pageNr]); } else{ //object with parameteres sent with GET request var params = {}; params.page = pageNr; $.ajax({ url: "getHTML.php", data: params, cache: false, success: function(response){ //handle your response here handleContent(response); //store the response in the cache for later use cache[pageNr] = response; } }); } }; 

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

Он похож на пользовательский опыт при прокрутке новостей в Google Finance

Обратите внимание: если вы обновите страницу, этот кеш будет удален.

В случае внесения изменений на страницу вам придется использовать ссылки Мориса Перри на Yahoo Exceptional Performance, чтобы гарантировать, что ваш сервер всегда возвращает вашу последнюю версию контента.

Подробнее о хэш-таблицах в JavaScript: http://www.mojavelinux.com/articles/javascript_hashes.html