浏览器的缓存机制

浏览器的缓存机制

1是什么?

把已经请求过一次的web资源(比如html页面,图片,js,data),拷贝一份到浏览器缓存中。key=资源标识,value:数据。当下一次请求同样的资源一样,如果缓存数据没过期,会重缓存数据里面获取

2:为什么?

减少网络IO,减少宽带,降低服务器压力,响应更快,用户体验更好

3.缓存的规则

(1)新鲜度 优先级高于校验值

在两种情况下会取缓存数据:

1.1)含有完整过期时间控制head信息,并且没有过期

1.2)浏览器已经使用过该缓存副本,并且在一个会话中检查过新鲜度

(2)校验值

资源有一个标签值hash5)。客户端访问服务器资源带上这个标签,如果服务器判断资源未更新,会返回304,告诉client缓存数据可用,并不会返回数据。特别是一些静态文件。如果过期则返回200和数据

4浏览器缓存控制流程

规则

消息包头

值/示例

类型

作用

新鲜度

expires

 Mon, 15 Aug 2016 03:56:47 GMT

响应

Http1.0会使用,资源超时时间,有一个问题,客户端时间和服务器时间的一致性

Cache-control

no-cache

响应

忽略缓存副本,实时获取资源,但不是不缓存

no-store

响应

强制浏览器不缓存副本

Max-age=[second]

响应

缓存副本的有效时间,资源在多少second之后超时

public

响应

任何路径的缓存者(本地缓存、代理服务器),可以无条件的缓存改资源
 

private

响应

只针对单个用户或者实体缓存资源

Last-modify

Mon, 15 Aug 2016 03:56:47 GMT 
 

响应

返回资源的时候返回该资源的1最近更新时间,隐患:最多具体到s

If-modify-since

Mon, 15 Aug 2016 03:56:47 GMT 

请求

如果该资源已经过期,客户端请求带上该字段,server可以判断该资源是否最新的,如果是,返回304,更新资源的过期时间等,

告诉客户端缓存资源依然可用

校验值

ETag

"fd56273325a2114818df4f29a628226d" 
 

响应

根据资源内容或着其他方式生成的一个标识资源的符号

If-None-Match

"fd56273325a2114818df4f29a628226d" 
 

请求

当资源过期,带上该标识,原理如同modify_time

5.浏览器HTTP请求流程

6.用户行为与缓存

浏览器缓存行为还有用户的行为有关,具体情况如下:

用户行为

expires/cache-control

Etag/last-modify

地址栏回车

有效

有效

页面链接跳转

有效

有效

新开窗口

有效

有效

前进后退

有效

有效

F5

无效

有效

Crtl+F5

无效

无效



 


 

7.不能缓存的请求

1.http head告诉浏览器不用缓存

比如Cache-Control:no-cache,,或Cache-Control:max-age=0等告诉浏览器不用缓存的请求

2.http 没有协商缓存

比如head不存在cache-control,etag,last-modify等

2.https安全加密的无法缓存

3.Post请求无法缓存

4.head

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值