HTTP 状态码 304 缓存机制
交互流程
客户端第一次请求服务端的某个地址时,服务端会在响应时携带 ETag 与 Last-Modified 响应头,客户端下次再发送同一地址的请求时,会携带 If-None-Match 与 If-Modified-Since 请求头,而 If-None-Match 就是 ETag 的值,If-Modified-Since 就是 Last-Modified 的值,这时服务端在接收请求后会获取请求头中的这两个值,然后进行比对,若资源没有更新,则响应 304 状态码,表示请求的资源没有更新,客户端可以从自己的缓存里获取,若资源已更新,则响应 200 状态码,同第一次请求一样,又会在响应时携带新的 ETag 与 Last-Modified 响应头,之后同上逻辑循环。
ETag 与 If-None-Match
ETag 是属于 HTTP 1.1 属性,它是由服务器生成返回给前端,说白了,ETag 一般为资源的哈希值,即 ETag 就是服务器生成的一个标记,用来标识资源是否有变化的,且 ETag 的优先级高于 Last-Modified。