浏览器缓存就是把一个请求过的web资源,存储在浏览器中。等下次在访问相同的请求时,缓存会根据缓存机制去决定要不要向服务器发送请求,或者直接用缓存的资源响应访问。html
浏览器缓存通常包含有html5
1.http协议缓存 2.cookie 3.session 4.sessionStorage 5.localStorage 6.indexDB
优势:web
1.加快页面打开速度 2.下降服务器压力(减小对服务器的请求) 3.减小网络宽带的消耗,省宽带费
缺点:数据库
缓存存于内存中,没有清理机制,因此在开发过程当中,要在适当的位置清理缓存对象,不然长此以往,文件多了以后会爆满整个硬盘。segmentfault
用户发起请求,判断是否有缓存,在判断缓存是否过时,若无过时则直接响应缓存的资源,若已过时则从新请求服务器资源。api
规则:(关键字段:http报文,header中)浏览器
expires: 服务端返回的到期时间(属于http 1.0版,但如今的浏览器默认使用http 1.1版,会被Cache-Control代替) Cache-Control:用于定义全部的缓存机制都必须遵循的缓存指示 值: public , private , no-cache(表示不缓存) , no-store max-age(值为0表示不用缓存),s-maxage,must-revalidate
Cache-Control中设定的时间会覆盖Expires中指定的时间缓存
浏览器第一次请求数据时,服务器会将缓存标识与数据一块儿返回给浏览器,浏览器将2者备份到缓存数据库中。当第二次发起请求时,将备份的缓存标识发送给服务器,服务器判断次缓存标识。判断成功后会返回403状态码,表示对比成功,可使用缓存的数据展现。服务器
Last-Modified:服务器在响应请求时,告诉浏览器资源的最后修改时间。 If-Modified-Since:客户端存取的该资源最后一次修改的时间,同Last-Modified。 ETag:响应中资源的校验值,在服务器上某个时段是惟一标识的。 If-None-Match:客户端存取的该资源的检验值,同ETag。 Date:服务器的时间
cookie是由服务端发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,而后客户端每次请求服务端时都会自动带上这些特殊信息(放置于http响应头部)。cookie
以 名/值 类型存储: username = jane path: 能够访问此cookie的页面路径。 domain: 能够访问该cookie的域名 若是设置为”.google.com”,则全部以”google.com”结尾的域名均可以访问该Cookie。注意第一个字符必须为“.” expires: 失效时间。 为正数,则Cookie在maxAge秒以后失效。 为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存Cookie。 为0,表示删除Cookie。默认是-1 size: cookie的大小 http: cookie的httponly属性。 为true,则只有在http请求头中会带有此cookie的信息,而不能经过document.cookie来访问此cookie。 secure: 是否只能经过https来传递此条cookie
1.设置: document.cookie = "name=Jonh; "; 多个: document.cookie = "name=Jonh; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/"; 2.修改: document.cookie = "name=John Smith; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/"; 要想修改一个cookie,只须要从新赋值就行,旧的值会被新的值覆盖。但要注意一点,在设置新cookie时,path/domain这几个选项必定要与旧cookie保持同样。不然不会修改旧值,而是添加了一个新的 cookie。 3.删除: document.cookie = "name=John Smith; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/"; 要想修改一个cookie,只须要从新赋值就行,旧的值会被新的值覆盖。但要注意一点,在设置新cookie时,path/domain这几个选项必定要与旧cookie保持同样。不然不会修改旧值,而是添加了一个新的 cookie。 4.获取: const cookieArr = document.cookie.split(';');
在web开发中,须要保存用户数据时,服务器能够为每一个用户浏览器建立一个session对象(默认状况下一个浏览器独占一个session对象),并把数据写入session对象。当用户使用浏览器访问其余程序时,其余程序能够从用户的session中取出该用户的数据。
sessionStorage是html5新增的会话存储对象。用于临时保存同一窗口下的数据,窗口关闭后会删除这些数据。
1.存储: sessionStorage.setItem('testKey','value'); or sessionStorage['testKey'] = 'value'; 2.读取: sessionStorage.getItem('testKey'); or sessionStorage['testKey']; 3.删除: 删除全部:sessionStorage.clear(); 删除某个: sessionStorage.removeItem('testKey');
同sessionStorage同样,localStorage也是html5新加的一个特性。与sessionStorage所不一样的是,localStorage是长期存储,浏览器关闭后,数据依然会存在。
使用方法与sessionStorage相同
1.存储: localStorage.setItem('testKey','value'); 2.读取: localStorage.getItem('testKey'); or localStorage.['testKey']; 3.删除: 删除全部:localStorage.clear(); 删除某个: localStorage.removeItem('testKey');
兼容性:localStorage与localStorage都支持ie8+,大部分浏览器都支持
indexedDB是在浏览器保存结构化数据中的一种数据库。
sessionStorage与localStorage 是简单的存储字符串健值对,可是对于大量的结构化数据的存储就比较不合适了。因此indexedDB是为了能够在客户端存储大量的结构化数据而存在的,而且使用索引高效检索的api。
每一个浏览器都不同,firefox 无限制,Google Chrome每条记录大小不超过130MB
教程:https://www.cnblogs.com/steph...
https://segmentfault.com/a/11...
https://www.cnblogs.com/xdp-g...