【转载请注明出处】:https://blog.youkuaiyun.com/huahao1989/article/details/107730210
整个 Web 系统架构在HTTP 协议之上, 利用 HTTP 的缓存机制不仅可以极大地减少服务器负载, 更重要的是加速页面的载入,以及减少用户的流量消耗。 快速到达和易于访问是 Web 与生俱来的特性, 其缓存机制也早已被服务器和浏览器厂商广泛地实现, 我们作为 Web 内容的作者何乐而不为呢?
HTTP 缓存简介
谈起 HTTP 缓存你首先想到的一定是磁盘缓存,以及 304 状态码。 这是浏览器处理缓存的两种情况:
- 浏览器询问服务器缓存是否有效,服务器返回 304 指示浏览器使用缓存。
- 资源仍然处于有效期时,浏览器会直接使用磁盘缓存(在刷新时稍有不同)。
每个状态的详细说明如下:
1、Cache-Control
Cache-Control
在 HTTP 响应头中,用于指示代理和 UA 使用何种缓存策略。比如:
- no-cache为本次响应不可直接用于后续请求(在没有向服务器进行校验的情况下)
- no-store为禁止缓存(不得存储到非易失性介质,如果有的话尽量移除,用于敏感信息)
private
为仅 UA 可缓存
public
为大家都可以缓存
当Cache-Control
为可缓存时,同时可指定缓存时间(比如public, max-age:86400
)。 这意味着在 1 天(60x60x24=86400)时间内,浏览器都可以直接使用该缓存。 当然浏览器也有权随时丢弃任何一项缓存,因此这里可能有一致性问题。
2、Etag
如果资源本身确实会随时发生改动,还用 Cache-Control 就会使用户看到的页面得不到更新。 但