HTTP协议分析系列(八)------http协议缓存详解
2017-01-22 15:56
387 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
我们观察图片的下载,往往第一次请求时200ok
第二次请求时 304 not modified 未修改状态
解释:在网络上有一些缓存服务器,浏览器自身也有缓存功能。当我们第一次访问某图片时,正常下载图片,返回值200,第二次访问时,基于一个前提--图片不会经常改动
服务器在返回200的同时,还返回该图片的签名--Etag(签名可以理解为图片的指纹).
当浏览器再次访问该图片时,去服务器校验指纹,如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器的负担。
抓包观察:
第一次请求头:
响应头:
第二行的意思是:如果自“Tue,18 Jun 2013 14:04:32 GMT”这个时间点以后,图片修改过,则重新请求,如果该图片最新的签名Etag的值和If-None-Match的值不匹配,则重新请求
第二次的响应信息:
[html]
view plain
copy
如果是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;//这个控制项不允许缓存,必须到主服务器验证。
可以利用apache的header模块
打开扩展,重启Apache
多次刷新页面发现:
上例可以看出,png格式的图片不允许缓存,因此每次都重新请求
我们观察图片的下载,往往第一次请求时200ok
第二次请求时 304 not modified 未修改状态
解释:在网络上有一些缓存服务器,浏览器自身也有缓存功能。当我们第一次访问某图片时,正常下载图片,返回值200,第二次访问时,基于一个前提--图片不会经常改动
服务器在返回200的同时,还返回该图片的签名--Etag(签名可以理解为图片的指纹).
当浏览器再次访问该图片时,去服务器校验指纹,如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器的负担。
抓包观察:
第一次请求头:
响应头:
第二行的意思是:如果自“Tue,18 Jun 2013 14:04:32 GMT”这个时间点以后,图片修改过,则重新请求,如果该图片最新的签名Etag的值和If-None-Match的值不匹配,则重新请求
第二次的响应信息:
[html]
view plain
copy
如果是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;//这个控制项不允许缓存,必须到主服务器验证。
可以利用apache的header模块
打开扩展,重启Apache
多次刷新页面发现:
上例可以看出,png格式的图片不允许缓存,因此每次都重新请求
相关文章推荐
- HTTP协议分析系列(七)------http协议之refer防盗链
- HTTP协议分析系列(六)------php+socket+cookie请求
- Java web项目 在线网络考试数据库连接部分代码
- HTTP协议分析系列(五)------php+socket编程发送http请求
- Mixed Content Blocking导致Firefox23 无法显示iframe
- HTTP协议分析系列(四)------重定向
- HTTP协议分析系列(三)------HTTP协议方法和状态码
- HTTP协议分析系列(二)------HTTP请求信息和相应信息的格式
- 手把手教你使用 virtualBox 让虚拟机连接网络
- HTTP协议分析系列(一)------初识HTTP协议
- nginx处理http
- 记录Debug神经网络的方法
- 神经网络与深度学习(第一章)(一)
- 循环神经网络教程第一部分-RNN简介
- Python 3.X 要使用urllib.request 来抓取网络资源。转
- 使用HttpUrlConnection多线程下载文件
- 循环神经网络(Recurrent)——介绍
- 使用nginx作为http负载均衡器
- httpclient的简单使用
- Nginx基于TCP的四层负载均衡介绍