Является ли кэширование в браузере автоматическим?

У меня есть приложение 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, например, временную метку или случайное число (см. Обход кеша).