我有一个向REST API发送请求的JavaScript应用程序,来自服务器的响应具有缓存标头(如ETag,缓存控制,过期)。是否在浏览器中自动缓存响应,或者应用程序必须实现某种机制来保存数据?
答案 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参数,例如时间戳或随机数(请参阅绕过缓存)