http缓存

2021-02-14 16:57阅读 0

http缓存分为强缓存和协商缓存

强缓存是通过响应头中的Expires或Cache_control来实现的。

Expires的配置是一个本地Date,它有一个弊端是取的是本地时间,当和服务器时间不同步时缓存不准确 在http1.1废弃

Cache_control有以下6个属性

  • no-cache 强制协商缓存
  • no-store 禁止缓存策略(和no-cache互斥)
  • private 资源自能被浏览器缓存(不填默认是private)
  • public 资源既可以被浏览器缓存也可以被代理服务器缓存(和private互斥)
  • max-age=s s为秒数,第一次缓存后,s秒内都读取强缓存
  • s-maxage 代理服务器缓存的时长(必须和public一起用)

协商缓存时通过响应头中的Etag和last-modified来实现

Etag的原理是当首次访问资源后会给这个资源一个文件哈希,再次访问请求头If-None-Match会带上服务器给的哈希来对比哈希是否相同来实现

Etag分强验证和弱验证,强验证会对整个资源进行计算,弱验证是对文件的一些属性进行计算

缺点:当文件过多或过大时Etag的哈希计算影响服务器的性能

last-modified的原理是当首次访问资源后会读出这个资源的修改日期,再次访问请求头If-Modified-Since会带上服务器给的修改日期来对比是否相同来实现

缺点:修改日期最小单位是秒,当资源下次修改仍在同一秒内时,仍会命中缓存。当修改了文件的其它属性时,修改时间不会变,也会命中缓存。

标签
标签
标签