http缓存相关概念:
请求头:浏览器向服务器发送请求的数据,资源
响应头:服务器向浏览器相应数据,告诉浏览器我是谁,我要怎么做。如,我是nginx,给你的资源是正确的200 还是错误的404,我告诉你需要缓存多久。
缓存优先级: pragma → cache-control → expires → ETag → last-modified
Http1.0: Pragma(已废弃), expires
Http1.1: Cache-control, ETag, Last-Modified
http缓存可以分为两类: 强制缓存,协商缓存
- 强制缓存:expires, Cache-control
1). Expires: 缓存过期时间,GMT时间,以客户端时间作为参考
2). Cache-control: 相对时间,属性值分为:- Private:仅允许客户端缓存
- Public:客户端和代理服务器都可以缓存
- Max-age=xxx:缓存内容将于xxx秒后失效
- No-cache:需要使用协商缓存来验证缓存数据
- No-store:所有内容都不会缓存,强制缓存、协商缓存都不会触发
- 协商缓存:Last-Modified, ETag
1)Last-Modified:定义上一次修改时间,再次请求时带请求头if-modified-since,与服务器进行对比
2)ETag:加密字符串,再次请求时带请求头if-none-match,与服务器对比
对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求直接用缓存,不在时间内则执行协商缓存策略。
对于协商策略,将缓存信息中的ETag和Last-Modified通过请求发送给服务器,有服务器校验,返回304状态码时,浏览器直接使用缓存。
浏览器第一次请求:
浏览器请求 -> 无缓存 -> 向web服务器请求 -> 请求响应,缓存协商 -> 呈现
浏览器再次请求:
常见的请求头:
常见的响应头: