浏览器缓存机制

#浏览器缓存机制#

cookie

  • 服务器收到请求后,会设置Set-cookie响应头,浏览器收到后就会将其存到本地,可设置失效时间,类似 Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly,其中Secure
  • 存放数据大小为4K左右
  • cookie会伴随客户端请求发送到服务器,每次都会携带在HTTP请求报头中,保存数据过多会带来性能问题,尤其是移动环境
cookie操作

设置cookie

document.cookie='name'+name+';expires='+(new Date()+100000)+';path='+path

读取cookie

var cookie = document.cookie

解析cookie

'{"'+document.cookie.replace(/;\s*/gim,'","').replace(/=/gim,'":"')+'"}';

清除cookie

document.cookie='name'+name+';expires='+new Date()+';path='+path

cookie新属性
Same-site
  • Lax: 默认,会被自动发送给服务器
  • Strict:只有请求和当前请求URL完全一致时才发送
  • None:同站请求和跨站请求都会发送cookie

localStorage##

  • 除非被清除,负责永久保存

localstorage安全性分析

  • Opera会将localStoragebase64编码外,其他浏览器直接明文存储
  • localStorage永久存储除非手动删除,不像cookie那样可以设置生存期
  • localStorage无法抵抗XSS攻击,而cookiehttponly
  • localStorage在同一个域下是共享的,因此任意路径下受到攻击的话,所有路径都会被牵连
  • localStorage 5M大的存储空间极有可能为恶意代码提供栖息地

sessionStorage##

  • 在浏览器关闭后失效

localStorage和sessionStorage一般为5M,仅在浏览器端保存,不参与通信

cookie,localStorage,sessionStorage权限

  • cookiedoccument的方法,而localStorage,sessionStoragewindow方法。

  • 同域名下(协议,端口,主机号)localStorage可访问,不管路径。

  • 从当前页面跳转到同域名下的其他页面时sessionStorage才可访问,若直接打开同域名子路径下或同路径下的的页面时,sessionStorage不能访问,除非跳转到上一级路径对应的页面后再跳回来才可以访问。

  • 同域名同级路径下的cookie可访问,同域名子路径下的cookie不能访问,但子路路径可访问父路径下的cookie

H5 AppCache##

应用程序缓存,以下优势

  • 离线浏览
  • 已缓存资源加载更快
  • 除了IE,其他浏览器都支持

应用

添加demo.manifest文件,内容为:

  • CACHE MANIFEST 此标题下的文件首次下载后缓存
  • NETWORK 此标题下不会缓存
  • FAILBACK 不能访问页面时应展现的内容
  • 例如:FAILBACK:
    /html5/ offline.html 表示用offline.html替换请求``/html5/`文件下所有请求出错的页面。

设置html标签

<html manifest="demo.manifest">
</html>

注意:manifest文件需要在服务器上正确的配置MIME-type,即text/cache-manifest

与缓存相关的http头##

Pragma

  • Pragma是http1.0中的
  • 只有IE能识别,IE虽能识别此meta标签,并不一定会在请求头中加入Cache-Control:no-cache,但的确每次都会发送请求
  • 通过设置meta标签
    <meta http-equiv="Pragma" content="no-cache">
  • 其他主流浏览器只能识别<meta http-equiv="Pragma" content="no-store">

Expires

  • expires告诉浏览器副本在缓存截止时间前是可用的(绝对时间间隔)
  • expires是http1.0中的

缺点

  • 到期时间是服务器时间,可能存在误差,
  • 可设置expires=max-age+每次下载时的当前request时间
  • 可用meta标签<meta http-equiv="expires" content="mon, 18 apr 2016 14:30:00 GMT">可将content设为0或者-1即不缓存
  • Pragma 优先级高于expires

Cache-Control

  • http1.1版本
  • max-age:单位(s)
  • 若和expires,Pragma 同时存在,cache-control优先
  • 可用meta标签<meta http-equiv="cache-control" content="max-age:2900">

以上字段决定是否发送请求,若设置的时间未过期,则不发送请求。直接走缓存,chrome下显示200 from disk cache

若以上字段设置的时间过期,而服务器上的资源并未更新,则使用以下字段

Last-Modified和If-Modified-Since

  • http1.1版本
  • 响应头:Last-Modified
  • 请求头:If-Modified-Since
  • 若Last-Modified时间早于If-Modified-Since时间,则返回http304,内容为空
  • 若If-Modified-Since时间比当前请求时间还晚,则认为是非法请求
  • 时间由服务器自动生成
  • 不识别毫秒级的时间
  • 优先级高于Etag

Etag和If-None-Match

  • http1.1版本,是Last-Modified的补充
  • Etag是服务器发送给客户端的请求标记,通过响应头传递
  • If-None-Match是请求头的信息,查看是否和Etag匹配,若匹配,返回304
  • 比last-modified精确,在服务器端通过取文件的hashCode或者MD5算法生成,运算量大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值