squid在max-age=0的情况下强制回源的问题

现在我们反向代理服务器准备用squid,起初设想的逻辑是这个样子的:让squid缓存源站的内容,如果源站的内容更新之后,手动调用一下脚本更新一下squid上的缓存,也就是执行类似这样一个命令:squidclient -h $squidIp -p $squidPort -m PURGE $http_url_to_refresh_cache。但是发现当源站返回的响应头中包含cache-control:max-age=0问题就来了,squid对于这种请求,在刷新浏览器之后强制回源了,我们本想让浏览器和squid之间进行通信,不要进行回源,但是现在却事与愿违了。本来我们是设想只在调用命令手动刷新之后,squid才(在下次重新请求时)去回源,现在倒好每次都回源了。
然后在说回来我们为什么使用max-age=0,因为如果我们不使用这个设置的话,浏览器就很有可能在下次请求的时候使用本地缓存文件,而不和squid服务器之间进行通信,这样即使我调用了PURGE命令,浏览器依然有可能使用的是就文件。
最后说一下今天查询的关于squid的配置资料,大体上发现有配置项ignore-no-cache可以忽略cache-control:no-cache,配置项override-expire可以忽略expire:xxx,但是没有发现哪个配置项可以忽略max-age=0的这种情况。
最后说一下,为啥不采用每次更新文件都改名的方式,如果每次更新文件都改名,那么就可以将所有文件都设置一个很大的max-age值,那么就不会遇到max-age=0被强制回源的问题了。答案是之前我们用第三方的解决方案的时候,一直都是用同名文件刷新缓存的方式,当然也有更改文件路径的情况,但是那些一般用在批处理操作中,刷新同名文件一般用在js文件中。

后来找到一个解决方案,把cache-control:max-age=0改为cache-control:no-cache,然后在squid配置ignore-reload,具体配置语法参见squid官网refresh_pattern的说明文档:http://www.squid-cache.org/Doc/config/refresh_pattern/。配置完成之后确实起作用了,但是最近发现这个解决方案也莫名其妙的失效了,squid的配置文件在这当中没有被修改过,squid也没有做升级,然后就不行了,这都已经黔驴技穷了,不知道该如何是好。

  • 视频服务网站设计问题
  • 用node.js接受http请求,把数据缓存在node的栈里,可以替代内存nosql数据库?
  • 如何提高memcache缓存命中率?
  • 关于web的缓存问题
  • http协议里面的CRLF问题?
  • PHP怎么做服务化?
  • php一般大家用什么实现http的提交和获取返回的数据?
  • 关于使用post方法出现canceled状态。
  • 1000万级粉丝和几千粉丝的微信开发有多大的区别?
  • 如何设计缓存的更新策略
  • 页面异步多个http请求,php后台接口响应慢,如何进行问题定位?