通过Javascript缓存和在服务器中设置HTTPResponse头有什么区别

通过Javascript缓存和在服务器中设置HTTPResponse头有什么区别,java,javascript,http,angularjs,caching,Java,Javascript,Http,Angularjs,Caching,在前端,我使用AngularJS“$resource”作为GET请求,在后端,我使用SpringMVC以Restful方式公开我的方法 现在我只想缓存我的GET请求中的一些。我注意到有一些方法可以做到这一点,比如使用$cacheFactory。或者类似于: return { Things: $resource('url/to/:thing', {}, { list : { method : 'GET', cache : true } }; 请注意,这也可以是一个

在前端,我使用AngularJS“$resource”作为GET请求,在后端,我使用SpringMVC以Restful方式公开我的方法

现在我只想缓存我的GET请求中的一些。我注意到有一些方法可以做到这一点,比如使用$cacheFactory。或者类似于:

 return {
   Things: $resource('url/to/:thing', {}, {
   list : {
   method : 'GET',
   cache : true
  }
 };
请注意,这也可以是一个带有一些缓存参数的简单ajax调用,而不必使用angularJS

因此,与其在客户端使用这种方法,不如在服务器上简单地通过Java在响应头中设置缓存来实现,比如:

response.setHeader("Cache-Control: max-age=2592000");
这两种方法的区别是什么?什么时候应该使用哪种方法


另外,这个问题不是服务器端缓存与客户端缓存的问题,我只是在服务器中设置了HTTPResponse头,仅此而已

我相信您指的是两个不同层的缓存

Angular的缓存(请参阅)是内存中的Javascript缓存。缓存将数据存储在Javascript对象中。您可以在客户端对它们进行一些控制。除非实现保存到本地存储的自定义缓存,否则缓存不会持久,因为一旦导航到另一个网页或刷新,缓存就会消失

响应中的
缓存控制
参数控制浏览器缓存。您不能直接从Javascript操作此缓存。但是,如果正确设置缓存头,它将在会话间持久化数据。它还允许任何中间代理(可能服务于多个客户端)知道它们是否可以缓存请求,从而比Javascript缓存减少更多的总体流量


至于何时应该使用哪种方法,我想说的是,通常依赖于浏览器缓存,因为它的级别要低得多,并且在会话之间持久存在。如果您需要对缓存的内容进行更多控制,而这些内容只能在客户端合理地获取,那么请使用Javascript缓存。或者,您可以同时启用这两种功能并从中获益,同时还要承担额外的代码维护/复杂性。

谢谢!在示例中,我看到了不需要缓存的3个不同参数:Pragma+cache Control+Expires。对于缓存,我是否需要这些3或缓存控制是否已完成?因为我没有看到任何标题为“Pragma:cache”,所以我选择了一个错误的示例(已删除)。我主要想指出的是,您应该深入研究
缓存控制的工作原理,否则您可能会出现令人惊讶的行为。但是是的,
缓存控制本身就可以工作。这篇文章看起来像是一篇有用的参考资料,我们使用缓存控制在特定页面上使用各种xhr加载的小部件5分钟。这意味着,如果返回页面,XHR仍然由javascript执行,但浏览器本身几乎会立即返回缓存的查询(当然,只要查询相同)。我喜欢这种方法,因为它是一种非常快速的方法,可以减少某些页面上的服务器负载,而这些页面上的信息不必是超新的。@David谢谢,删除了关于IE8@Woody“减少总流量”只有在有代理的情况下才是正确的?否则,数据存储的位置似乎只有差异;浏览器缓存与本地存储?