上面是浏览器存储的缓存策略
大规模系统中希望自动缓存
浏览器端和服务器端去协商一种通用的
通过http header
cache-control
- max-age
- s-maxage
- private(私人缓存,比如浏览器缓存的信息 只有访问这个浏览器的人才能使用)
- public(cdn,能被很多用户访问并且读取信息)
- no-cache
- no-store(完全不使用缓存)
缓存设备有很多: 浏览器 浏览器和服务器之间的代理服务器(cdn)
response headers:
: [http1.1],(优先级高于expires)
,(只能指定public缓存,优先级高于max-age,不是从浏览器拿而是,过了时间再从原服务器拿)
cache-control: private,max-age=0,no-cache(搭配max-age临时用的,表示不管怎么样都会向浏览器发起请求,通过服务端比如last-modified等信息去进一步判断浏览器缓存有没有过期,从而知道缓存策略)
: [http1.0],(缓存过期时间,是服务器端的具体时间点)
以上是强的浏览器端的缓存策略
- 弊端: 服务器文件更新之后 浏览器无法感知 因为都是直接从浏览器读
如何感知服务端文件发生变化呢?
Last-Modified / If-Modified-Since(同时存在优先级低于max-age)
- 服务端返回
response headers:
: - 客户端每次请求带上
request headers:
: Wed, 24 Jan 2018 12:18:34 GMT - 没有更新返回
- 去浏览器拿缓存文件使用
- 更新返回新的last-modified和
弊端
- 文件修改 也会让缓存失效
Etag / If-None-Match
- 服务端返回
response headers:
: (文件内容改变 hash值变化) - 客户端每次请求带上
request headers:
: 57c958-65f (比对 有变动返回200 没变动就304) - 没有更新返回
- 去浏览器拿缓存文件使用
- 更新返回新的Etag和
网友评论