http协议之缓存

30 篇文章 0 订阅
7 篇文章 0 订阅
http协议缓存控制
第一次请求时200 ok
第二次请求304 not modified 为修改状态

解释: 在网络上有一些缓存服务器,另外浏览器自身也有缓存功能。
当我们第一次访问某个图片的时候,正常下载图片返回200 ok
基于一个前提-图片不会经常改动,服务器在返回200的时候,还返回该图片的”签名“ -- etag (签名可以理解为图片的“指纹”)
当浏览器再次访问该图片时,去服务器校验“指纹”
如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担

抓包观察:
第一次请求:
     第一次响应头: 在响应头里面可以看到请求的图片信息
           etag:"321397979879-fndlsh32yfsh894392"
           last-modified:  Tue, 10 Jun 2018 12:12:12 GMT

第二次请求头:
      第二次请求头里面:
          if-modified-since:    Tue, 10 Jun 2018 12:12:12 GMT
             如果自Tue, 10 Jun 2018 12:12:12 GMT这个时间后图片没有修改则不会重新请求,如果有修改则会重新请求
          if-none-match:  "321397979879-fndlsh32yfsh894392"
             如果该图片最新的etag值 和 if-none-match 的值不匹配,则重新请求

    第二次响应头:
          status code 304 not modified
              如果是304就以为这浏览器从本地的缓存中取数据,节省了图片在网络上传输的时间


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

利用协议控制缓存(apache服务器):
利用协议控制缓存:相关模块是---mod_expires
ExpiresActive On
ExpiresByType image/jpeg 'access plus 1 month'
控制是否缓存以及缓存周期

在.htaccess中,具体语法如下:
    ExpiresDefault "<base>  [plus] {<num> <type>}*"
    ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"
ExpiresDefault 是设置默认的缓存参数
ExpiresByType 是按照文件类型来设计独特的缓存参数
我们用第二种来做测试给jpg图片设置一个月的生存周期
后面4个参数怎么理解?
Base: 基于哪个时间点来计算缓存有效期
Access/now: 基于请求响应的那一瞬间,比如从此瞬间到一个月之后
Modification: 基于被请求文件的最后修改日期来计算,比如最后修改日期的后一周内仍然有效

num: 缓存时间的大小 (30)
type: 缓存时间的单位 (天)
实例:
如果这是在集群环境里,缓存服务器得到此图片,将会认为一个月内有效,从而减轻了主服务器的负担


利用协议取消缓存(apache服务器):
    如果有些信息不要缓存,必须要去主服务器获取,那么要这样
客户端:
    Cache-Control:no-cache
    Pragma:no-cache     

服务器端清除缓存:相关模块是:mod_header 
<FileMatch "\.(jpg|gif|png)$">
Cache-Control:no-cache
Header unset Etag
Header unset Last-Modified
</FilesMatch>

revalidate:使重新生效,使从新有法律效力

多次刷新浏览器请求效果gif会始终都请求, jpeg 的会有缓存
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值