У меня есть приложение JavaScript, которое отправляет запросы REST API, ответы от сервера содержат заголовки кеша (например, ETag, кеш-контроль, истекает). Является ли кэширование ответов в браузере автоматическим, или приложение должно реализовать какой-то механизм для сохранения данных?
Является ли кэширование в браузере автоматическим?
Ответ 1
Запрос AJAX ничем не отличается от обычного запроса - это GET/POST/HEAD/любой запрос, отправляемый браузером, и обрабатывается как таковой. Это подтверждено здесь:
Подсистемы HTTP и Cache современных браузеров находятся на гораздо более низком уровне, чем объект XMLHttpRequest Ajaxs. На этом уровне браузер не знает или не заботится о запросах Ajax. Он просто подчиняется обычным правилам кеширования HTTP, основанным на заголовках ответов, возвращаемых с сервера.
Согласно документации jQuery, кэши также могут быть аннулированы хотя бы одним обычным способом (добавление строки запроса):
кеш (по умолчанию: true, false для dataType 'script' и 'jsonp')
Тип: Boolean
Если установлено значение false, это заставит запрашиваемые страницы не кэшироваться браузером. Примечание. Установка кеша в false будет работать только с запросами HEAD и GET. Он работает, добавляя "_ = {timestamp}" к параметрам GET. Параметр не нужен для других типов запросов, за исключением IE8, когда POST создается с URL-адресом, который уже был запрошен GET.
Короче говоря, учитывая те же заголовки, ответы AJAX кэшируются так же, как и другие запросы.
Ответ 2
Браузер обрабатывает автоматическое кэширование ресурсов. То, о чем вы, кажется, спрашиваете, - это ответ от сервера.
Вам нужно будет установить это в своем приложении. Вы можете сделать это как на интерфейсе, так и на бэкэнде.
В большинстве инфраструктур JS реализовано управление кешем, например:
JQuery
$.ajaxSetup({
// Disable caching of AJAX responses
cache: false
});
AngularJS
$http.defaults.cache = false;
и т.д..
На бэкэнде это действительно зависит от того, какой язык вы используете, какой серверный движок и т.д.
Оформить заказ Memcached, например http://memcached.org/
Как и в случае с веб-разработкой, здесь и там есть странные вещи, например некоторые версии IE автоматически шифруют запросы, и вам нужно добавить уникальный идентификатор к URL-адресу, чтобы этого не было.
Ответ 3
Браузер должен автоматически обрабатывать кеш. Проверьте эту статью, только очистить кеш-метод для javascript. https://developer.chrome.com/extensions/browsingData
Ответ 4
Если сервер отправляет ответ с любым из заголовков кеша, браузер должен уважать его. нет никакой разницы между ресурсами или ajax-запросами.
также вы можете указать заголовки кеша в своих вызовах ajax, чтобы не использовать кеши и получать весь ответ с сервера.
Ответ 5
Большинство современных браузеров поддерживают кеширование браузера из-за кеша и заголовков expire
http://www.arlocarreon.com/blog/http/http-requests-and-your-browsers-cache/
There are 2 apects of an HTTP request that can qualify it for being cached:
- Specifc HTTP cache and expire headers
- A unique URL
Интересное чтение:
http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/
Ответ 6
Из https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started:
Примечание 2: Если вы не установите заголовок Cache-Control: no-cache браузер будет кэшировать ответ и никогда не повторно отправлять запрос, что делает отладку "сложной". Вы также можете добавить всегда различный дополнительный параметр GET, например, временную метку или случайное число (см. Обход кеша).