是否自动在浏览器中缓存?

时间:2015-06-13 22:13:56

标签: http caching

我有一个向REST API发送请求的JavaScript应用程序,来自服务器的响应具有缓存标头(如ETag,缓存控制,过期)。是否在浏览器中自动缓存响应,或者应用程序必须实现某种机制来保存数据?

6 个答案:

答案 0 :(得分:2)

浏览器自动处理资源缓存。您似乎要问的是来自服务器的实际响应。

您需要在自己的应用程序中自行设置。你可以在前端和后端都这样做。

大多数JS框架都实现了缓存控制,例如:

<强>的jQuery

$http.defaults.cache = false;

<强> AngularJS

wget http://example.com:443/

等。

在后端,它实际上取决于您使用的语言,服务器引擎等。

Checkout Memcached例如 http://memcached.org/

与Web开发的任何内容一样,这里和那里都有奇怪的东西,例如某些IE版本会自动追踪请求,你必须在url中添加唯一ID以防止这种情况发生。

答案 1 :(得分:2)

AJAX请求与普通请求没有什么不同 - 它是GET / POST / HEAD /浏览器发送的任何请求,它都是这样处理的。这已得到确认here

  

现代浏览器的HTTP和Cache子系统的级别远低于Ajax的XMLHttpRequest对象。在此级别,浏览器不知道或不关心Ajax请求。它只是遵循从服务器返回的响应头的正常HTTP缓存规则。

根据the jQuery documentation,缓存也可以至少以一种常规方式失效(附加查询字符串):

  

缓存(默认:true,false,对于dataType'script'和'jsonp')

     

类型:布尔值

     

如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是将“_ = {timestamp}”附加到GET参数。其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。

简而言之,在给定相同标头的情况下,AJAX响应的缓存方式与其他请求相同。

答案 2 :(得分:0)

浏览器应自动处理缓存。 查看这篇文章,javascript只有明确的缓存方法。 https://developer.chrome.com/extensions/browsingData

答案 3 :(得分:0)

如果服务器发送带有任何缓存头的响应,浏览器应该尊重它。资源或ajax请求之间没有区别。

您也可以在ajax调用中指定缓存标头,使其不使用缓存并从服务器获取整个响应。

答案 4 :(得分: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/

答案 5 :(得分:0)

来自https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

  

注意2:如果您没有设置标题Cache-Control:no-cache,浏览器将缓存响应并且永远不会重新提交请求,从而使调试“具有挑战性”。您还可以附加一个始终不同的aditional GET参数,例如时间戳或随机数(请参阅绕过缓存)