Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

s-maxage 为代理服务器设置不同的缓存策略

  对于熟悉 http 的同学来说,max-age 这玩而已再熟悉不过了。不仅是 Cache-Control 中使用,连 Cookie 中都会用到。可是 s-maxage 这玩意儿大家可能就不一定知道了。在一些小项目中可能并不会用到它,但在基于各种代理的大型架构中就需要考虑代理服务器的缓存问题。
  每一层代理都有自己的缓存机制。如果是一层完全基于 HTTP 的代理,应用服务器的缓存机制就会在代理服务器上被应用。对于一些不会改变的静态资源,我们经常希望客户端一直缓存下去。这时候会设置 max-age=31536000(一年)之类的。但如果代理服务器上也遵循 HTTP 缓存的规范,这个 max-age 就会被应用。也就是说,代理服务器上也会缓存住这个资源一年。这不是在浪费代理服务器的磁盘空间么?所以有时候我们会对代理服务器使用一些不一样的缓存策略,比如我们虽然让客户端缓存一年,但希望让代理服务器缓存一天就够了。于是在设置 max-age=31536000 的同时还可以设置 s-maxage=86400。
  标准的 http 代理服务器都实现了 x-maxage 的解析。比如 nginx,我我们可以在它的 http_upstream 模块中找到实现的代码。但一些其它兼职的 http 代理服务器上,实现方式就奇奇怪怪的了。比如 HAProxy 虽然也会处理 s-maxage,但是结果并不正确。
  s-maxage 是一个在 RFC2616 中就定义的东西,属于比较古老的(钦佩大老们的先见之明!)。规范中定义了代理服务器会优先考虑 s-maxage,所以我们才可以对代理服务器和终端用户设置不同的缓存策略。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^