HTTP协议分析系列(八)------http协议缓存详解

来源:互联网 发布:linux自学 带不带桌面 编辑:程序博客网 时间:2024/03/29 05:13

我们观察图片的下载,往往第一次请求时200ok

第二次请求时 304 not modified 未修改状态

解释:在网络上有一些缓存服务器,浏览器自身也有缓存功能。当我们第一次访问某图片时,正常下载图片,返回值200,第二次访问时,基于一个前提--图片不会经常改动

服务器在返回200的同时,还返回该图片的签名--Etag(签名可以理解为图片的指纹).

当浏览器再次访问该图片时,去服务器校验指纹,如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器的负担。



抓包观察:

第一次请求头:


响应头:


第二行的意思是:如果自“Tue18 Jun 2013 14:04:32 GMT”这个时间点以后,图片修改过,则重新请求,如果该图片最新的签名Etag的值和If-None-Match的值不匹配,则重新请求

第二次的响应信息:


[html] view plain copy
  1. 如果是304,就意味着浏览器从本地取缓存,节省了图片在网络上传输的时间。  

如果网站比较大,有N台缓存服务器,那么这N台缓存服务器缓存主服务器上的文件缓存多久?

1.要不要缓存?

2.缓存多久?

思考------这说明,缓存服务器与主服务器之间,应该有一些协议来说明这些问题

追问------用什么协议来说明这2个问题?

答:还是http协议,用头信息cache-control来控制

 

具体用法:

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


重启Apache

.htaccess中,具体语法如下


ExpiresDefault是设置默认的缓存参数

ExpiresByType是按照文件类型来设计独特的缓存参数

我们用第二种来做测试,给jpg图片设置一个月的生存周期

后面4各参数怎么理解?

Base:基于那个时间点来计算缓存有效期

Access/now:基于请求响应的那一瞬间,比如从此瞬间到一个月之后。

Modification:基于被请求文件的最后修改日期来计算,比如被修改后的一周内仍然有效。

Num:是指缓存时间的大小

Type:缓存时间的单位(天)

放在:.htaccess


如果这是在集群环境中,缓存服务器得到此图片,将会认为一个月内有效。

减轻了主服务的负担。

 

 

我们能否设置服务器不让用缓存呢?

比如有些个人信息,不允许缓存服务器缓存,必须到服务器去请求

Control-cache:no-store.must-revalidate;//这个控制项不允许缓存,必须到主服务器验证。

 

可以利用apacheheader模块

打开扩展,重启Apache

多次刷新页面发现:

上例可以看出,png格式的图片不允许缓存,因此每次都重新请求

0 0
原创粉丝点击