Http 浏览器中的缓存是自动的吗?

Http 浏览器中的缓存是自动的吗?,http,caching,Http,Caching,我有一个JavaScript应用程序,它向restapi发送请求,来自服务器的响应有缓存头(比如ETag、缓存控制、expires)。浏览器中的响应缓存是自动的,还是应用程序必须实现某种机制来保存数据?浏览器应该自动处理缓存。 查看本文,javascript只有clear cache方法。 如果服务器发送带有任何缓存头的响应,浏览器应尊重该响应。资源和ajax请求之间没有区别 您还可以在ajax调用中指定缓存头,使其不使用缓存,并从服务器获取整个响应。大多数现代浏览器都支持浏览器缓存,因为缓存头

我有一个JavaScript应用程序,它向restapi发送请求,来自服务器的响应有缓存头(比如ETag、缓存控制、expires)。浏览器中的响应缓存是自动的,还是应用程序必须实现某种机制来保存数据?

浏览器应该自动处理缓存。 查看本文,javascript只有clear cache方法。

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


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

大多数现代浏览器都支持浏览器缓存,因为缓存头和过期头

有趣的阅读:


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

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

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

jQuery

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

$http.defaults.cache = false;
等等

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

例如,签出Memcached

与web开发中的任何事情一样,这里和那里都有一些奇怪的事情,例如,一些IE版本会自动更改请求,您必须向url添加唯一id以防止出现这种情况。

来自:

注2:如果未设置标头缓存控制:无缓存,浏览器将缓存响应,并且永远不会重新提交请求,这使得调试“具有挑战性”。您还可以附加一个始终不同的传统GET参数,如时间戳或随机数(请参阅绕过缓存)


AJAX请求与普通请求没有什么不同——它是由浏览器发送的GET/POST/HEAD/whatever请求,并按此进行处理。这一点得到证实:

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

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

缓存(对于数据类型“script”和“jsonp”,默认值为true、false)

类型:布尔型

如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能正确处理HEAD和GET请求。它的工作原理是在GET参数后面附加“={timestamp}”。对于其他类型的请求,不需要该参数,除非在IE8中,对GET已请求的URL进行POST


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

您可以使用chrome/firefox上的network inspector进行检查。(扰流板:是的;如果标题设置正确,浏览器将缓存ajax调用)复制:它真的是HTTP响应的缓存吗?在我看来,这是一个缓存的网站资源,它取决于。默认情况下,几乎所有现代浏览器都会缓存.js、.css和图像。在这些类型的文件中,有一些选项要求浏览器不要缓存。在用户端,通常有不缓存任何内容的设置。我不是说缓存资源,而是说缓存json中rest api的数据。
$http.defaults.cache = false;