静态资源更新机制
cache control 响应头
1:private : 客户端可以缓存
2:public: 客户端和代理服务器都可以缓存
3:max-age=xxx :缓存的内容将在xxx秒后失效
4:no-cache:强制向服务端再验证一次
cache control 响应头有效性判断
ETag:资源唯一标识
If-None-Match:客户端发送的匹配Etag标识符
Last-modified:资源最后被修改的时间
if-Modified-Since:客户端发送的匹配资源最后修改时间的标识符
有效性判断浏览器的三种刷新方式
1:回车刷新或者a链接:看cache-control 对应的max-age是否仍然有效,有效则直接from cache,若cache-control中为no-cache,则进入缓存协商逻辑
2:F5刷新或者command+R刷新:去掉cache-control 中的max-age或直接设置max-age为0,然后进入缓存协商逻辑。
协商机制,比较Last-modified和ETag到服务端,若服务端判断没有变化则304不返回数据,否则200返回数据
【技术心得】Last-Modified,Etag,Expire 区别
Last-Modified 是什么
Last-Modified 是 HttpHeader 中的资源的最后修改时间,如果带有 Last-Modified ,下一次发送 Http 请求时,将会发生带 If-modified-since 的 HttpHeader 。如果没有过期,将会收到 304 的响应,从缓存中读取。
Etag 是什么
Etag 是 HttpHeader 中代表资源的标签,在服务器端生成。如果带有 Etag ,下一次发送带 Etag 的请求,如果 Etag 没有变化将收到 304 的响应,从缓存中读取。
Etag 在使用时要注意相同资源多台 Web 服务器的 Etag 的一致性。
Expire 是什么
Expire 是 HttpHeader 中代表资源的过期时间,由服务器段设置。如果带有 Expire ,则在 Expire 过期前不会发生 Http 请求,直接从缓存中读取。用户强制 F5 例外。
Last-Modified,Etag,Expire 混合
通常 Last-Modified,Etag,Expire 是一起混合使用的,特别是 Last-Modified 和 Expire 经常一起使用,因为 Expire 可以让浏览器完全不发起 Http 请求,而当浏览器强制 F5 的时候又有 Last-Modified ,这样就很好的达到了浏览器段缓存的效果。
Etag 和 Expire 一起使用时,先判断 Expire ,如果已经过期,再发起 Http 请求,如果 Etag 也过期,则返回 200 响应。如果 Etag 没有过期则返回 304 响应。
Last-Modified,Etag,Expires 三个同时使用时。先判断 Expire ,然后发送 Http 请求,服务器先判断 last-modified ,再判断 Etag ,必须都没有过期,才能返回 304 响应。