2015-06-13 3 views
12

У меня есть приложение JavaScript, которое отправляет запросы REST API, ответы от сервера содержат заголовки кеша (например, ETag, кеш-контроль, истекает). Является ли кэширование ответов в браузере автоматическим, или приложение должно реализовать какой-то механизм для сохранения данных?Является ли кэширование в браузере автоматическим?

+2

Вы можете проверить себя, используя сетевой инспектор на chrome/firefox. (спойлер: да, браузеры будут кэшировать ajax-вызовы, если заголовки настроены правильно) –

+0

Дубликат: http://stackoverflow.com/questions/1230998/cant-the-browser-just-use-its-cache-from-prior -ajax-calls –

ответ

2

запрос AJAX не отличается от обычного запроса - это GET/POST/HEAD ./что запрос отправляется в браузере, и он обрабатывается как таковой Это подтверждается here:.

HTTP-и кэш подсистемы современных браузеров на гораздо более низком уровне, чем объект XMLHttpRequest Аякса при этом уровне, браузер не знает или не заботится о запросах Ajax. Он просто подчиняется обычным правилам кеширования HTTP, основанным на заголовках ответов, возвращаемых с сервера.

Согласно the jQuery documentation, кэши также могут быть признаны недействительными по крайней мере, одним обычным способом (добавляя строку запроса):

кэш (по умолчанию: правда, ложь для DATATYPE «сценария» и ' JSONP ')

Тип: Boolean

Если установлено значение ложно, оно будет принудительно запрошенных страниц не должны быть в кэше браузера. Примечание. Установка кеша в false будет работать только с запросами HEAD и GET. Он работает, добавляя «_ = {timestamp}» к параметрам GET. Параметр не нужен для других типов запросов, за исключением IE8, когда POST отправляется по URL-адресу, который уже был запрошен GET.

Таким образом, при одинаковых заголовках ответы AJAX кэшируются так же, как и другие запросы.

0

Браузер должен автоматически обрабатывать кеш. Проверьте эту статью, есть только ясный метод кеша для javascript. https://developer.chrome.com/extensions/browsingData

+1

Действительно ли это кеш ответа HTTP? Мне кажется, что это кеш для ресурса веб-сайта. –

+0

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

+0

Я не говорю о кешировании ресурсов, а о кешировании данных, которые поступают для отдыха api в json. –

0

Если сервер отправляет ответ с любым из заголовков кеша, браузеры должны его уважать. нет никакой разницы между ресурсами или ajax-запросами.

также вы можете указать заголовки кеша в своих вызовах ajax, чтобы они не использовали кеши и не получали весь ответ с сервера.

0

Большинство современных браузеров поддерживают кэширование браузера из кэша и истекает заголовки

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/

1

браузер обрабатывает автоматически кэш ресурсов. То, о чем вы, кажется, спрашиваете, - это ответ от сервера.

Вам нужно будет установить это в своем приложении. Вы можете сделать это как на front-end, так и на backend.

Большинство структур JS реализовали управления кэшем, например:

JQuery

$.ajaxSetup({ 
    // Disable caching of AJAX responses 
    cache: false 
}); 

AngularJS

$http.defaults.cache = false; 

т.д.

На бэкэндом это действительно зависит от того, какой язык вы используете, двигатель какой сервер и т.д.

Checkout Memcached, например http://memcached.org/

Как и все с веб-разработки есть странные вещи здесь и там, например некоторые IE версии автоматически перехватывают запросы, и вам нужно добавить уникальный идентификатор к URL-адресу, чтобы это предотвратить.

0

От https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started:

Примечание 2: Если вы не установите заголовок Cache-Control: нет кэша браузера будет кэшировать ответ и никогда не будет повторно отправлять запрос, что делает отладку «сложной."Вы также можете добавить к всегда-с различным фильмом параметра GET, как метки времени или случайным число (см минуя кэш)

Смежные вопросы