关于缓存的个人理解

221 阅读3分钟

1.浏览器本地缓存:是浏览器对之前的请求过的文件进行缓存,以便下一次我访问的时候重复使用节省宽带,提高访问速度,降低服务器的压力。

  • 本地小容量缓存:
    • cookie:数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识之类的,sessionStorage和localStorage虽然也有存储大小的限制,但是比cokie大得多,sessionStorage约5M、localStiorag约20M了
    • sessionStorage的数据在浏览器关闭后会自动的删除本地的离线缓存:localStorage,会长期存在,cookie只在设置的cookie过期时间之前有效,不管浏览器是否关闭
    • sessionStorage,不在不同的浏览器窗口中共享,在上面的关闭浏览器窗口,存储的数据都会消失就可见一斑,但是lacalStorage和cookie是在所有的窗口都是共享的
    • cookie数据始终在同源的http请求中携带,也就是cookie会在浏览器和服务器之前来回传递,而sessionStorage和localStorage不会自动把数据发给服务器,仅保存在本地
  • 本地的大容器存储
    • websql
    • indexDB 这两个用到的倒不是很多,等用到的时候再去看也可以

2.http缓存

  • 强缓存:浏览器不会向服务器发送任何请求,直接在本地缓存中读取文件,并返回200 ok
  • 命中强缓存:
    • Cache-Contorl(优先):当值(max-age)设为一定的时间时,则代表在请求成功返回的一刻开始(浏览器也会记录下)的规定时间内再次访问的相同的页面,就会命中强缓存
    • Expires:设置过期时间,浏览器再次访问的页面时,如果在这个过期时间内,就命中强缓存 -协商缓存:向服务器发送请求,服务器会根据这个请求头里的一些参数来判断是否命中协商缓存,如果命中,则返回304状态并带上新的响应头通知浏览器从缓存中读取资源
    • 当资源过期后,浏览器寻找响应头里的Etag(优先),在请求体中带上请求头if-none-match(值是Etag的值)。服务器收到请求进行比对,值不同返回200和新资源或值相同返回304
    • 若没有Etag,当资源过期时,去寻找响应头里的Last-Modified,则向服务器请求时带上头if-modified-since表示请求时间。服务器收到请求后发现有if-modified-since与被请求资源的最后修改时间进行对比(Last-Modified),若最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;若最后修改时间较旧(小),说明资源无新修改,响应HTTP 304 走缓存。

强缓存和协商缓存主要的区别是使用本地缓存时,是否需要向服务器验证本地的缓存是否还有效,本地缓存是放在磁盘里的

具体可以看下面这副图去理解:

image.png

应用程序缓存

在H5引入里应用程序缓存,意味着WEB应用可进行缓存,在没有网的时候,也可以去访问,具体的等自己的项目中用到了再去看