赞
踩
缓存头是指:response的返回结果可被中间经过的各代理服务器以及请求浏览器缓存
缓存的意义是我不需要每次都到业务服务器去请求数据,只需要在中间缓存中获取即可,提升了获取数据效率及响应速度,当然数据变化频率很快的场景并不适合开启Cache-Control。
可缓存参数:public 、private 、no-cache
public : 可被中间经过的各代理服务器以及请求浏览器缓存
private : 只能被请求浏览器缓存
no-cache : 哪里都不能缓存
缓存到期:
max-age = <seconds>
含义:浏览器缓存的到期时间,到期后继续去业务服务器请求
s-max-age = <seconds>
含义:s-max-age与max-age的区别是代理服务器优先使用s-max-age
max-stale = <seconds> 含义:即使请求到期了,发起端在request中代理max-stale头依然可以坊问过期的缓存。备注:resopnse中加max-stale头是毫无意义的
实战案例
案例说明:我的html加载了css、js等请求,我预计这些静态文件不会被经常改动,所以我把缓存时间设置的比较长,可能是一年。 但是我中途业务需要我把静态文件改了,客户端怎么生效呢?
解决方案:一般情况下静态文件改了,会根据文件内容生成一段hash码来改变静态文件的名字,这样request url就会被改变,之前的缓存就不会被命中,那么新的改动就生效了。这是业界的最常用的方法。
no-cache的策略,缓存验证Last-Modified与Etag
其实no-cache并非完全不使用本地或代理缓存,只是每次使用前需要到服务器端进行验证。
Last-Modified : 本地与服务器资源的最后修改时间不一致,则使用服务器资源
Etag : 比Last-Modified更严谨,取文件的hash码来比较,若有任务的内容改动则使用服务器资源
Cache-Control命中流程
篇外
http协议之所以被称为协议是因为它里面的所有header头、请求方法等都只是约定,你可以遵守也可以不遵守,再次申明它只是约定,没有任何功能的。
比如 ‘s-max-age’ : '2000’时,代理服务器可能缓存了,但也可能没缓存,这要看你使用的代理服务器的具体功能特性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。