HTTP 协议缓存控制

我们观察图片的下载,往往:

1次请求时 200 ok
第2次请求时 304 Not Modified 未修改状态

解释:在网络上,有一些缓存服务器,另。浏览器自身也有缓存功能

当我们第一次某图片时,正常下载图片,返回200

基于一个前提–图片不会经常改动,服务器在返回200的同事,还返回该图片的
“签名”–Etag ,(签名可以理解为图片的“指纹”)
当浏览器再次访问该图片时,去服务器校验“指纹”
如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担

捉包观察:
第一次请求头:
这里写图片描述
第一次响应头:
这里写图片描述
第二次请求头:
这里写图片描述
这2行的意思是:
如果自“Tue,18 Jun 2013 14:04:32 GMT”这个时间点以后,图片修改过,则重新请求。
如果该图片是最新的Etag的值和If-None-Match 的值不匹配,则重新请求。
第二次响应信息
这里写图片描述
如果是304,就意味着浏览器从本地取缓存,节省了图片在网络上传输的事件

选学:
如果网站比较大,有N台缓存服务器,那么这N台缓存服务器,如何处理服务器上文件
1,要不要缓存
2,缓存多久?
思考—这说明 缓存服务器与主服务器之间,应该有一些协议,来说明这2哥问题?
追问—用什么协议来说明这2哥问题?
答:—还是http协议,用头信息,cache-control来控制

具体用法:
在主服务器,打开apache的expire的扩展,利用该扩展来控制图片,css,html
等文件控制是否缓存,及缓存生命周期

在.htaccess中,具体语法如下:

ExpiresDefault “<base>[plus]{<num><type>}*”
ExpiresByType type/encoding “<base>[plus]{<num><type>}*”

ExpiresDefault 是设置默认的缓存参数
ExpiresByType是按照文件类型来设计独特的缓存参数
我们用第2种来做测试给jpg图片设置1个月的生存周期

后面4个参数怎么理解?
Base :基于那个时间点来计算缓存有效期
Access/now:基于请求/响应的那一瞬间,比如从此瞬间到1个月之后
Modifiaction:基于被请求文件的最后修改日期来计算 ,比如最后修改日期的后1周内任然有效

Num:缓存时间的大小(30)
Type:缓存时间的单位(天)
这里写图片描述
如果这是在集群环境里,缓存服务器的阿斗此图片,将会认为一个月内有效
减轻了主服务器负担

我们能否设置服务器,不让用缓存呢?
比如有些个人信息不允许缓存服务器缓存,必须到主服务器去请求
Control-cache:no-store,must-revalidate //意味着不允许缓存,必须去主服务器验证
可以利用apache的header 模块
这里写图片描述
多次刷新页面,发现
这里写图片描述
上列可以看出。Gril.gif不允许缓存,因此每次都重新请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值