作者回复: 1、取缓存时,就可以用If-None-Match,意思是:不匹配时再给我内容,如果指纹匹配了,就别给我内容了,我用自己的缓存还省点带宽和你服务器的CPU磁盘资源。 2、如果多人协作修改同一个页面,提交更新时,则可以用If-Match,意思是:如果我上次拉取的更新到现在没人修改过的话,就提交掉,否则拒绝我,别把其他人的更新覆盖掉了(参考git merge)。 3、时间类的同理。
作者回复: 比如强调性能为主的Nginx,它是把修改时间与文件大小拼接在一起作为ETag,你可以参考
作者回复: ngx_http_not_modified_filter_module,是这个模块
作者回复: Content-Length不行,因为有些Chunk Response,因为包体是不定长的,所以它不会发Content-Length,详见21课。 大多数服务器,会返回Content-Type、Server和Date头部,特别是第1个,正常服务器都会返回。
作者回复: 你可以说下具体的场景,以及针对哪个头部。
作者回复: 是的,当浏览器发现这个资源可以缓存时,就会在缓存过期后加入相关头部,再发起请求,期望得到304减少带宽与时延消耗
作者回复: 很多方法,例如记录上次更新时间,若当前时间距更新时间小于某值,则直接使用缓存,视应用场景而定。