设为首页 收藏本站
查看: 674|回复: 0

[经验分享] http缓存机制和原理详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-31 10:15:27 | 显示全部楼层 |阅读模式
【背景】
http1.1

wKiom1gUpleCwoS3AABEfy6yhXE725.jpg


http1.1 是1997年开始使用的。

http是一种协议,用于传输浏览器发送的数据并接收由http server响应的数据。 浏览器就是解释html语言等内容的。


http协议构成:
request 有client(浏览器)发送
起始行 first line:
    <method> <url> <version>
1
2
    as:
    GET /ex?i=mm_28347190_2425761_9313994 HTTP/1.1



首部 Header:
    filed:value

     as:

1
2
3
4
5
6
    Host:www.baidu.com
    Accept-Encoding:gzip, defalt
    Referer: www.taobao.com/xxx
    User-Aagent: IE8...
    Cookie:xxxx
    .......



主体 Body:
   数据向POST方法的json数据等



responsed(由http server发送):

起始行 first line:
    <version> <code> <reason phrase>
1
2
    as:
    HTTP/1.1 200 OK



首部 Header:
    filed:value
     as:
1
2
3
4
5
6
7
8
9
    Expires: Sat, 29 Oct 2016 13:59:01 GMT
    Data:  Sat, 29 Oct 2016 13:44:01 GMT
    Server: nginx
    Content-Type: text/html; charset=utf-8
    Cache-Control:  max-age=900
    Content-Encoding: gzip
    Age: 541
    X-Via: 1.1 xzai69:8 (Cdn Cache Server V2.0), 1.1 sdta234:0 (Cdn Cache Server V2
    Connection: keep-alive



主体 Body:
   响应的数据内容html文本或者图片或者css js



注意:
1 client和server端是相对的概念的。不是说client一定是浏览器 如elinks curl splider ...程序
2 C/S 和 B/S架构的区别。主要是理解B/S架构B是指Broswer浏览器,是指将独立应用程序的实现放在浏览器中。比如浏览器中的office不用独立的office软件就可以打开word excel文档。
3 其中一个提高网页浏览速度的技术是缓存技术。比如一些网页游戏,在开始前都会加载一会就是将一些元素载入到浏览器中缓存起来。加快速度。


【缓存技术】
wKiom1gUrAThtY4pAACjLzHcs_g617.jpg


注意:
1 cache 中的private cache和public cache是相对的。对应存入自己电脑中的cache是只对user1可以使用的,user2 是不能使用的。所以这个缓存就是private私有缓存。  正向代理的缓存对于user1 和user2 都是可以使用的,就能同时加快user1 和user2 的速度,这个就是public cache。
2 缓存最终不是最权威的资源,会所有失效的必要性。所有要重点探索和设定的缓存时间。



【http 1.0缓存机制】
C ---> S

第一次  client向serve发起一个request,server 向client respond回应内容的头部中加入一个Expire(1.0版本中唯一一个控制缓存的头部和策略)过期时间。

第二次 client想server发起请求的时候,第一种情况:如果内容在过期时间之内,就会使用本地的缓存。第二种情况:如果超过了过期时间,重新发起请求,并从Server端获取数据(不管数据是否有更新)


缺点: 在第二的第二种情况在,client想server端发起的请求时,如果server中的数据没有更新也被完整的响应一份数据到client端。这样就浪费了带宽资源。和服务器的响应资源。

所以引入了http1.1 版本,有一个询问的机制条件式判断,请求的时候可以发送一个头部为If-Modify-Since到Server端。自动那个时候,内容是否有更新呢? 如果没更新就返回304的响应码,Not-Modify。


【http 1.1缓存机制】
丰富的头部信息控制缓存策略

1、缓存相关的HTTP首部

HTTP协议提供了多个首部用以实现页面缓存及缓存失效的相关功能,这其中最常用的有:
(1)Expires:用于指定某web对象的过期日期/时间,通常为GMT格式;一般不应该将此设定的未来过长的时间,一年的长度对大多场景来说足矣;其常用于为纯静态内容如JavaScripts样式表或图片指定缓存周期;
(2)Cache-Control:用于定义所有的缓存机制都必须遵循的缓存指示,这些指示是一些特定的指令,包括public、private、no-cache(表示可以存储,但在重新验正其有效性之前不能用于响应客户端请求)、no-store、max-age、s-maxage以及must-revalidate等;Cache-Control中设定的时间会覆盖Expires中指定的时间;
    public: 定义为共有的缓存

    private: 私有的缓存

    no-cache: 存储但必须校验

    no-store:不存储
    max-age:缓存最大时长

    s-maxage:只能用于公共缓存或者共享式缓存 中指定最大缓存时长

    must-revalidate:必须重新校验



(3)Etag:响应首部,用于在响应报文中为某web资源定义版本标识符;(解决 时间戳对比 秒级别的粗糙,无法判断文件是否更新,用于验证秒一下级别的更新)

条件时请求判断机制:
(4)Last-Mofified:响应首部,用于回应客户端关于Last-Modified-Since或If-None-Match首部的请求,以通知客户端其请求的web对象最近的修改时间;

(5)If-Modified-Since:条件式请求首部,如果在此首部指定的时间后其请求的web内容发生了更改,则服务器响应更改后的内容,否则,则响应304(not modified);
(6)If-None-Match:条件式请求首部;web服务器为某web内容定义了Etag首部,客户端请求时能获取并保存这个首部的值(即标签);而后在后续的请求中会通过If-None-Match首部附加其认可的标签列表并让服务器端检验其原始内容是否有可以与此列表中的某标签匹配的标签;如果有,则响应304,否则,则返回原始内容;
(7)Vary:响应首部,原始服务器根据请求来源的不同响应的可能会有所不同的首部,最常用的是Vary: Accept-Encoding,用于通知缓存机制其内容看起来可能不同于用户请求时Accept-Encoding-header首部标识的编码格式;
(8)Age:缓存服务器可以发送的一个额外的响应首部,用于指定响应的有效期限;浏览器通常根据此首部决定内容的缓存时长;如果响应报文首部还使用了max-age指令,那么缓存的有效时长为“max-age减去Age”的结果;


Age(响应标头,HTTP1.1)

Age标头,对于原始服务器来说,用于指明,当前资源被生成了多久,即存活期.而对于一个缓存代理服务器来说,它表示缓存副本,被缓存了多久.缓存代理服务器,必须生成Age头.其值以秒为单位.且可能为负值.
寿命:即响应的寿命,指从原始服务器发出实体后所经历的时间,或者是重新验证,证明某缓存仍处于最新状态(可信赖)之后,所经历的时间. 参考响应头中的 Age,其单位是秒.



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-293731-1-1.html 上篇帖子: apache配置文件http.conf详解 下篇帖子: Linux下Apache部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表