【问题标题】:Is there a way to use browser cache for AngularJS JSON requests ($http/$resource)?有没有办法将浏览器缓存用于 AngularJS JSON 请求($http/$resource)?
【发布时间】:2014-09-16 14:40:10
【问题描述】:

我们正在开发一个带有 AngularJS 和 RESTful 服务的应用程序。服务返回的数据很少更改,我非常想缓存一段时间的响应。我在响应中设置了Cache-Control: no-transform, max-age=604800

有没有办法让 AngularJS JSON 请求 ($http/$resource) 尊重浏览器缓存,而不是使用完全并行的内置 AngularJS 缓存 (http://www.metaltoad.com/blog/angularjs-vs-browser-http-cache) 或 angular-cache 库 (http://angular-data.pseudobry.com/documentation/api/angular-cache)?从我看到的网络来看,默认情况下 $http 请求会忽略 Cache-Control 标头。

【问题讨论】:

    标签: javascript json angularjs caching browser-cache


    【解决方案1】:

    我遇到的问题是页面重新加载以及它们的行为方式不同。

    让我们将用例分为两个:

    1。页面点击:只需转到以前访问过的页面。

    在这里,我看到了您所看到的:大部分内容都是从缓存中检索的。 Chrome 比 Firefox/Firebug 显示得更好。 Firebug 根本不会在“网络”面板中显示缓存命中。

    2。定期重新加载页面。

    几乎所有浏览器都有两个刷新页面的快捷方式:定期重新加载(Chrome/Windows 中的 Ctrl+R)和 重新加载忽略缓存(Chrome/Windows 中的 Shift+F5)。我说的是定期重新加载,因为如果缓存被忽略,那就没什么好讨论的了。

    似乎正在发生的是浏览器对页面上的所有资源发出 If-Modified-Since 请求。然后,服务器以 304 Not Modified 响应静态资源,浏览器从缓存中获取它们。

    问题是我们没有在我们的服务中处理 If-Modified-Since。我们只是将 Cache-Control 设置为过期时间。

    开始处理 If-Modified-Since 的服务器代码更新解决了该问题。

    顺便说一句,这是一篇关于浏览器缓存的背景文章,我发现它非常有用:https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers

    【讨论】:

      【解决方案2】:

      浏览器将遵守该特定资产的响应设置的缓存时间。任何后续 GET 都应查看缓存,直到达到超时。

      您可能有devtools 忽略了这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-01
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 2018-08-08
        • 1970-01-01
        相关资源
        最近更新 更多