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也没有做升级,然后就不行了,这都已经黔驴技穷了,不知道该如何是好。

  • 关于使用post方法出现canceled状态。
  • 如何通过spring interceptor实现ehcache page cache
  • cache-control:max-age和If-Modified-Since
  • 测量建立tcp连接所消耗的时间,基于HTTP的API请求,改进网络IO的时间消耗也是一种用户体验的提升。
  • 浏览器开发工具里发出的 HTTP 请求, 还有本地发出的请求, 跨域问题怎样理解
  • Redis和Memcached有什么区别?
  • scrapy302重定向问题
  • 如何调优 WEBDIS性能(REDIS的HTTP代理)
  • 为什么手机内置浏览器无法播放非静态资源的视频?
  • 手机app,根据算法算出某个权重值进行排序,如何提高排序性能?
  • 七牛云镜像存储,文件更新机制