概念 浏览器缓存是浏览器端保存数据用于快速读取或避免重复优化机制.前端
缓存类别 前端缓存主要分为http缓存和浏览器缓存,其中http缓存是在http进行传输的时候的缓存,主要在服务器上设置,而浏览器缓存则是存储的客户端的,能够经过js对浏览器的存储进行操做 web
http缓存分为强制缓存和协商缓存
复制代码
强制缓存(本身强制决定)就是向浏览器缓存查找该请求结果,而且根据该结果的缓存规则决定是否使用该缓存结果,强制缓存的状况主要有三种:sql
浏览器在向服务器发送http请求的时候,服务器会将缓存规则返给http响应报文的http头和请求结果一块儿返回给浏览器,其中控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。chrome
在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为:
public:全部内容都将被缓存(客户端和代理服务器均可缓存)
private:全部内容只有客户端能够缓存,Cache-Control的默认取值
no-cache:客户端缓存内容,可是是否使用缓存则须要通过协商缓存来验证决定
no-store:全部内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
复制代码
协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有如下两种状况: 1)协商缓存生效,返回304,数据库
一样,协商缓存的标识也是在响应报文的HTTP头中和请求结果一块儿返回给浏览器的,控制协商缓存的字段分别有:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。
复制代码
强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么表明该请求的缓存失效,从新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存,主要过程以下:后端
cookie浏览器
1)http是一种无状态的协议,因此每次客户端请求服务器的时候都是'初次见面',因此每次接收用户请求时,都是没法肯定用户的身份,
2)为了解决这个无状态问题,会在登陆成功时,服务端再响应头中存储着cookie信息服务端给用户下发cookie的数据(假设是一张小票),
3)等之后用户再请求服务端时,带着小票一块儿发送过去(自动),服务端检测小票的信息便可判断这个用户使用访问过
复制代码
cookie的数据是存储在客户端的,存储容量只有4k缓存
cookie能完成的部分应用,还有更多的功能须要全局变量。cookie的缺点主要集中于安全性和隐私保护。主要包括如下几种:安全
session实现方式:性能优化
好处:确保数据没法被用户操做,安全
localStorage
LocalStorage的数据将一直保存在浏览器内,直到用户清除浏览器缓存数据为止。存储容量为5M
sessionStorage
HTML5的应用缓存(application cache),或者简称为 appcache,是专门为开发离线 Web 应用而设计 的。Appcache就是从浏览器的缓存中分出来的一块缓存区。要想在这个缓存中保存数据,可使用一个 描述文件(manifest file),列出要下载和缓存的资源
webSql(被废弃)
websql这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现,主要有如下特色 Web Sql 数据库API 实际上不是HTML5规范的组成部分; 在HTML5以前就已经存在了,是单独的规范; 它是将数据以数据库的形式存储在客户端,根据需求去读取;
跟Storage的区别是:
websql API主要包含三个核心方法:
indexDB(非关系型数据库)
IndexedDB 是一个为了可以在客户端存储可观数量的结构化数据,而且在这些数据上使用索引进行高性能检索的 API。虽然 DOM 存储 对于存储少许数据是很是有用的,可是它对大量结构化数据的存储就显得力不从心了。IndexedDB 则提供了这样的一个解决方案。 IndexedDB 分别为同步和异步访问提供了单独的 API 。同步 API 原本是要用于仅供 Web Workers 内部使用,可是尚未被任何浏览器所实现。异步 API 在 Web Workers 内部和外部均可以使用,另外浏览器可能对indexDB有50M大小的限制,通常用户保存大量用户数据并要求数据之间有搜索须要的场景。 异步API
往返缓存又称为BFCache,是浏览器在前进后退按钮上为了提高历史页面的渲染速度的一种策略。该策略具体表现为,当用户前往新页面时,将当前页面的浏览器DOM状态保存到bfcache中;当用户点击后退按钮的时候,将页面直接从bfcache中加载,节省了网络请求的时间。