HTTP缓存代理策略
缓存代理,主要分为两部分,服务端的缓存控制和客户端的缓存控制;客户端的缓存控制由浏览器来实现,而服务端的缓存控制由代理服务器来实现。代理服务器介于浏览器客户端和源服务器之间,相当于一个数据中转站,将未更新可复用的数据缓存起来,以便降低源服务器的并发量。
服务器端缓存控制策略
可以同时控制客户端和代理
首先总结一下常用的缓存控制属性的含义:
服务器端的Cache-Control主要包括以下属性
max-age = x 缓存寿命(时间计算从报文创建开始,也就是离开服务器的时间,包含了在链路传输过程中所有节点所停留的时间)
s-maxage 只限定在代理上能够存多久,客户端仍然用max-age
no_store 禁用缓存
no_cache 可以缓存,但使用前必须向服务器验证是否过期
must-revalidate 缓存不过期就继续使用,过期了还想使用必须去服务器验证
procy-revalidate 只要求代理的缓存过期后必须验证,不必去源服务器验证,只验证到代理环节就行
private 缓存只能在客户端保存,任何中间代理都不能缓存
public 缓存完全开放,谁都可以存,主要针对代理服务器
no-transform 禁止对缓存下来的数据进行优化处理(例如将图片生成png、webp格式等)
客户端缓存控制策略
关于缓存寿命的两个新属性
max-stale = x 代理上的缓存过期了也能使用,但是超过x秒就失效
min-fresh = x 缓存必须有效且在x秒后仍然有效
Chrome下的缓存区别
Chrome开发者工具Network栏的Size除了资源大小的数值外,还会有from disk cache和form memory cache属性;两者都表示缓存,无需访问服务器。区别在于:
from disk cache(存在磁盘中) 浏览器关闭后,数据资源依然存在(一般存储样式css文件)
form memory cache(存在内存中) 浏览器关闭后,数据资源被释放掉,不再存在(一半存储脚本字体图片等)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!