HTTP使用Cache-control头进行缓存控制
Cache-Control: no-store
没有缓存Cache-Control: no-cache
缓存但重新验证Cache-Control: private
私有缓存Cache-Control: public
公共缓存
通常情况下,针对应用中那些不会改变的文件,
可以使用Cache-Control: max-age=<seconds>
的方式来控制缓存过期,其表示资源能够被缓存(保持新鲜)的最大时间。
对于随版本发布经常变更的文件,以上方式并不适用,提供另一种缓存方式:
Cache-Control: no-cache
结合ETag校验
ETag HTTP响应头是资源的特定版本标识符,类似于指纹,由服务器根据资源文件进行生成。如果资源更改,则服务器一定生成新的ETag值。
具体做法是:
- 服务器响应头中添加ETag字段,同时添加Cache-Control: no-cache。
- 浏览器端缓存资源,但是后续每次请求时不会直接读取本地缓存,而是进行服务端验证。
- 浏览器对于有缓存的资源,会在请求头中附加ETag指纹进行验证请求。
- 服务端收到ETag后,将其与最新ETag进行对比校验。
- 如果ETag没有改变则返回304 Not Modified,通知浏览器端使用本地缓存文件。
- 如果ETag改变,则返回200,并返回最新资源。