应用层缓存技术-Http的强制缓存和协商缓存

1、Http强制缓存

         强制缓存流程: 在第一次访问服务器获取到数据后,在数据过期之前不在向服务器发起请求获取数据;因此实现此

流程的核心就是如何知道数据什么时间过期。

          强制缓存的过期时间是通过第一次访问服务器返回的响应头获取,在http1.0和http1.1版本中通过不同的响应头字段

来判断。

1.1) http1.0版本

       通过 Expires 响应头中来实现;expires 表示资源会过期的时间,在过期时间内浏览器不会再次向服务器发起请求,

而是直接读取本地缓存数据库(from memory or from disk)中的信息,两种方式根据浏览器的策略随机获取

1.2) http1.1版本

    强制缓存通过 Cache-Control 响应头来实现,Cache-Control有多个字段表示

private 客户端可以缓存  
public 客户端和代理服务器均可缓存  
max-age=xxx 缓存资源将在xxx秒后过期 最常用,为了兼容,两个版本的强制缓存都会被实现
no-cache 需要使用协商缓存来验证是否过期  
no-store 不可缓存  

 

 

 

 

 

 

 总结:强制缓存只有首次请求才会向服务器发起通信,读取缓存资源时不会跟服务器通信,资源的状态码status=200,

资源的 size 为 from memory 或者 from disk ,http1.1的优先级高于http1.0

2、Http协商缓存

        协商缓存和强制缓存的不同之处,就是协商缓存每次都需跟服务器通信,并会增加缓存标识,如果需要读取本地

缓存,则资源的状态码status=304.

        http1.0和http1.1的实现方式依然不同

2.1)Http1.0版本

             应用层缓存技术-Http的强制缓存和协商缓存

2.2)Http1.1版本

      Http1.1版本,服务器通过Etag设置响应头缓存标识

应用层缓存技术-Http的强制缓存和协商缓存

 总结: 协商缓存每次都会与服务器交互,第一次是拿数据和缓存标识的过程,从第二次开始浏览器询问服务器资源

是否有更新,每次请求都会传输数据,如果命中缓存,则服务器返回的资源状态码为304,而不是200;为了浏览器

兼容问题两个版本的缓存都会被实现,Http1.1的优先级高于Http1.0。