17 客户端缓存是如何帮助服务器分担流量的?

你好,我是周志明。这节课,我们继续来讨论透明多级分流系统中,最靠近用户一侧的分流部件:浏览器的客户端缓存。

当万维网刚刚出现的时候,浏览器的缓存机制差不多就已经存在了。在HTTP协议设计之初,人们便确定了服务端与客户端之间“无状态”(Stateless)的交互原则,即要求客户端的每次请求是独立的,每次请求无法感知、也不能依赖另一个请求的存在,这既简化了HTTP服务器的设计,也为它的水平扩展能力留下了广阔的空间。

但无状态并不是只有好的一面。因为客户端的每次请求都是独立的,服务端不会保存之前请求的状态和资源,所以也不可避免地导致它会携带重复的数据,造成网络性能的降低。

那么,HTTP协议针对这个问题的解决方案,就是客户端缓存。从HTTP/1.0到1.1、再到2.0版本的演进中,逐步形成了现在被称为“状态缓存”、“强制缓存”(或简称为“强缓存”)和“协商缓存”这三种HTTP缓存机制。

这其中的状态缓存,是指不经过服务器,客户端直接根据缓存信息来判断目标网站的状态。以前只有301/Moved Permanently(永久重定向)这一种;后来在RFC6797中增加了HSTS(HTTP Strict Transport Security)机制,用来避免依赖301/302跳转HTTPS时,可能产生的降级中间人劫持问题(在第28、29讲中,我还会展开讲解这个问题),这也属于另一种状态缓存。