您的位置:首页 > 理论基础 > 计算机网络

Http缓存机制

2016-07-10 15:07 477 查看

什么是Http缓存

缓存缓存,就是把需要的东西存起来,不需要每次都去请求。主要目的减小服务器压力,放到客户端上来讲,还利于节省流量,还能流畅的把UI显示出来,提高了用户体验。对于Http缓存来讲,主要的就是校验缓存的有效性,也就是新鲜度。如果客户端不能及时响应服务端的数据变化,缓存一直不能被更新,那不就是得不偿失了?

Http缓存策略

1.Expires策略

Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。Expires规定了缓存失效时间,客户端拿当前时间和这个失效时间比较,如果超过了这个时间,即无效。

Expires策略有2个明显的缺点:

1.缓存时间依赖于客户端,每个客户端的时间可能不相同,精度不高。

2.缓存有效期的时间精度不高。

举个例子,一个新闻列表的缓存时间是有后台运营决定的,当我产生这个列表的时候是无法确定该列表到底多久以后会被更新,只能预估一个时间。只有当列表被更新,我才知道这个更新时间之前的资源都是过期的。

而且,Expires是HTTP1.0的东西,而Cache-Control是HTTP1.1的,规定如果max-age和Expires同时存在,前者优先级高于后者

2.Cache-control策略

Cache -Control指定请求和响应遵循的缓存机制。

响应消息中的指令包括

1.Public指示响应可被任何缓存区缓存。
2.Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
3.no-cache指示请求或响应消息不能缓存
4.no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
5.max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
6.min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
7.max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。


3.缓存校验字段

.Last-Modified/If-Modified-Since

Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉客户端资源的最后修改时间。

If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

Etag/If-None-Match

Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。

If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。

请求流程

当第一次发起请求时:



(图片来自于网络)

第二次请求:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: