http缓存机制和原理详解

简介:

【背景】

http1.1


wKiom1gUpleCwoS3AABEfy6yhXE725.png



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.png



注意:

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,其单位是秒.






【实践-分析-理解】


谷歌浏览器 f5(ctrl +r) 和 ctrl+f5的区别



f5是刷新,但是不彻底: 会在请求的是后加上 

  1. If-Modified-Since:  和 max-age:0  


请求的时候问 server你是否有更新,有如server 查看更新时间一样,就返回304 表示没有更新。



ctrl+f5是强制更新,刷新页面,server返回的一定是200(资源存在的前提)。 会在http的请求头加上

Cache-Control: no-cache




概念解释如下:

Cache-Control  no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以和public结合使用),或者严格要求使用最新数据 的应用(不惜牺牲使用缓存的所有好处) 

Pragma 当"no-cache"出现在请求消息中时,应用程序应当向原始服务器推送此请求,即使它已 

经在上次请求时已经缓存了一份拷贝。这样将保证客户端能接收到最权威的回应。它也用来 

在客户端发现其缓存中拷贝不可用或过期时,对拷贝进行强制刷新。 

cache-control 

max-age>0 时 直接从游览器缓存中 提取 

max-age<=0 时 向server 发送http 请求确认 ,该资源是否有修改 

有的话 返回200 ,无的话 返回304. 

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1867220如需转载请自行联系原作者


cuizhiliang

相关文章
|
2月前
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
131 70
|
23天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
23天前
【网路原理】——HTTP状态码和Postman使用
状态码(200,404,403,405,500,504,302),Postman下载和使用构造请求
|
23天前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
23天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
26天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
95 1
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
1月前
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
37 1
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
91 4
|
2月前
|
安全 算法 网络安全
一张图就把HTTPS工作原理讲明白了!
【10月更文挑战第31天】
124 1
一张图就把HTTPS工作原理讲明白了!