简述HTTP协议报文首部缓存机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述HTTP协议报文首部缓存机制相关的知识,希望对你有一定的参考价值。

http缓存原理与机制

强制缓存机制(过期时间机制):
基本原理:在客户端第一次请求服务端时,服务端会将缓存规则信息添加在header中,客户端会通过这些信息判断是否能缓存。若是强制缓存,则header中会有两个字段来标记缓存失效的时间(expires或cache-control),要指出的是在HTTP1.0中,只支持expires,目前的浏览器默认都是HTTP1.1了,基本都支持cache-control。在客户端第一次请求并添加缓存后,以后每次客户端的请求响应数据都是缓存服务器提供的,不会再经由服务端。缓存服务器根据cache-control字段来判断何时更新缓存,是否更新缓存,是否可以使用缓存。
cache-control有下面几个参数:
private,允许客户端使用缓存
max-age,缓存最大失效时长
public,允许客户端和代理使用缓存
no-cache,关闭强制缓存,需要使用对比缓存
no-store,所有内容都不使用缓存
请求报文首部和响应报文首部都有cache-control
对比缓存机制(条件式缓存机制):
基本原理:
1.缓存命中的情况:客户端会向缓存服务器请求获取缓存header标识,客户端获取标识后,会向后端服务器发送header标识规则,若未失效便通知客户端使用缓存服务器缓存的数据(一般状态码为304)。值得注意的是在客户端获取header标识后只会向后端服务器发送header,服务端也只会向客户端返回header。
2.缓存未命中的情况:客户端会向缓存服务器请求获取缓存header标识,客户端获取标识后,会向后端服务器发送header标识规则,若失效便通知客户端不使用缓存服务器缓存的数据(一般状态码为200),并更新缓存。
对比缓存的标识:
last-modified/if-modfied-since:资源最后修改时间戳
etag/if-none-match:资源校验码,可以是类似hash值的算法(优先级高于last-modified)
不管是以上哪一种都是为了比对当前缓存内容和后端服务器最新内容是否一致的。若返回值为304则认为是一致,则直接使用缓存;若返回值是200则认为是不一致,则更新缓存。

缓存方式:
1.代理式缓存:当用户发送请求时,会先经由缓存服务器,若缓存命中便直接返回给客户端,若没命中则由缓存服务器向后端主机发送请求并相应给客户端,再由缓存服务器判断是否缓存响应的内容。
2.旁挂式缓存:当用户发送请求时,会先经由缓存服务器,若缓存命中便直接返回给客户端,若没命中则由客户端自己向后端主机发送请求并相应给客户端,再由客户端判断是否缓存响应的内容。

varnish是一款代理式缓存程序,降低了客户端的要求,客户端不需要判断哪些内容需要缓存哪些不需要缓存,增强了用户体验。现在一般都是使用代理式缓存模型。

varnish的缓存存储机制:
-s
malloc
file
persistent (测试阶段,还未有正式版)

以上是关于简述HTTP协议报文首部缓存机制的主要内容,如果未能解决你的问题,请参考以下文章

《图解HTTP》—— 浏览器HTTP协议缓存机制

缓存机制

浏览器缓存机制

彻底理解浏览器的缓存机制(http缓存机制)

浏览器缓存机制(HTTP缓存机制)

TCP实现可靠传输的机制