应用层
HTTP
HTTP缓存技术
强制缓存,客户端决定是否使用缓存
协商缓存,服务器告知客户端是否使用缓存
服务发送响应时会携带Cache-Control,Etag,Last-Modified等响应头来设置缓存
当客户端发现缓存失效时,则会向服务器发送请求,携带If-Modifid-Since,If-None-Match字段,
然后服务器做决策,资源过期或修改过则发送200,否则发送304
Etag+If-None-Match的优先级别高于Last-Modified+If-Modified-Since
原因:
- 在没有修改文件内容情况下文件的最后修改时间可能也会改变,这会导致客户端认为这文件被改动了,从而重新请求;
- 可能有些文件是在秒级以内修改的,
If-Modified-Since
能检查到的粒度是秒级的,使用 Etag就能够保证这种需求下客户端在 1 秒内能刷新多次; - 有些服务器不能精确获取文件的最后修改时间。