3.8 KiB
Web缓存基础:术语、HTTP报头和缓存策略
简介
对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一。缓存,或者对之前请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这受制于对内容所声明的缓存策略。
在这份指南中,我们将讨论一些Web内容缓存的基本概念。这主要包括如何选择缓存策略以保证互联网范围内的缓存能够正确的处理您的内容。我们将谈一谈缓存带来的好处、副作用、以及不同的策略能带来的性能和灵活性的最大结合。
什么是缓存?
缓存是存储可重用资源以便加快后续请求的术语。有许多不同类型的缓存,每种都有其自身的特点,应用程序缓存和内存缓存由于其对特定回复的加速,都很常用。
Web缓存,这份指南的中心,是一种不同类型的缓存。Web缓存是HTTP协议的一个核心特性,它能最小化网络流量,并且提升用户感知到的整个系统的响应速度。内容从服务器到浏览器的传输过程中,每个层面都可以找到缓存的身影。
Web缓存根据特定的规则缓存相应HTTP请求的回复。对于缓存内容的后续请求便可以直接由缓存满足而不是重新发送请求到Web服务器。
好处
有效的缓存技术不仅帮助用户,还帮助内容的提供者。一些缓存对内容分发带来的好处有:
-
减少网络开销:内容可以在从内容提供者到内容消费者网络路径之间的许多不同的地方被缓存。当内容在距离内容消费者更近的地方被缓存时,由于缓存的存在,请求将不会消耗额外的网络资源。
-
加快响应速度:由于整个网络往返变得并不是必需的,缓存可以使内容的获得变得更快。缓存在距用户更近的地方被维护,例如浏览器缓存,使得内容的获取几乎是瞬时的。
-
在同样的硬件上提高速度:对于保存原始内容的服务器来说,更多的性能可以通过允许激进的缓存策略从硬件上压榨出来。内容拥有者们可以利用交付路径上强大的服务器来应对某个内容负载的冲击。
-
网络中断时内容依旧可用:使用某种策略,缓存可以保证内容对用户的可用,尽管当原始服务器可能在某段时间内变得不可用。
术语
在面对缓存时,您可能对一些经常遇到的术语可能不太熟悉。一些常见的术语如下:
-
原始服务器:原始服务器是内容的原始存放地点。如果您是Web服务器管理员,它就是您所管理的机器。它负责为任何不能从缓存中得到的内容进行回复,并且负责设置所有内容的缓存策略。
-
缓存命中率:一个缓存有效性依照缓存的命中率进行度量。他是可以从缓存中得到的数据的请求数与所有请求数的比率。缓存命中率高意味着有很高比例的数据可以从缓存中获得。这通常是大多数管理员想要的结果。
-
新鲜度:新鲜度用来描述一个缓存中的项目是否依旧适合返回给客户端。缓存中的内容只有在由缓存策略指定的新鲜度时间内才会被返回。
-
过期内容:缓存中根据缓存策略的新鲜度设置已过期的内容。过期的内容被标记为"陈旧"。通常,过期内容不能用于回复客户端的请求。必须重新从原始服务器请求新的内容或者至少验证缓存的内容是否仍然准确。
-
校验:缓存中的过期内容可以被验证有效以便刷新过期时间。验证过程包括联系原始服务器以检查缓存的数据是否依旧代表了最近的版本。
-
失效:失效是依据过期日期从缓存中移除内容的过程。当内容在原始服务器上已被改变并且缓存中过期的内容会导致客户端签名问题时这个步骤是必须的。
还有许多其他的缓存术语,不过上面的这些应该能帮助你开始。
什么能被缓存?
某些特定的内容比其他内容更容易被缓存。对大多数站点来说,一些缓存友好的内容如下:
- Logo和商标图像
- 通用的非旋转的图像(例如,导航图标)
- 样式表
- 通用Javascript文件
- 可下载的内容
- 媒体文件
这些文件更倾向于不经常改变,所以长时间的对他们进行缓存能获得好处。
一些项目在缓存中必须加以注意:
- HTML页面
- 旋转的图像
- 经常修改的Javascript和CSS文件
- 经过登陆的cookies访问的内容
一些内容从来不应该被缓存:
- 与敏感信息相关的资源(银行数据,等)
- 用户相关且经常更改的数据
除上面的通用规则外,通常您需要指定一些规则以便于更好地缓存不同种类的内容。例如,如果登陆的用户都看到的是同样的网站视图,就应该在任何地方缓存这个页面。如果登陆的用户会在一段时间内看到站点中用户敏感的视图,您应该让用户的浏览器缓存该数据但不让中间的任何中介缓存该视图。
Web内容缓存的位置
Web内容会在整个分发路径中的许多不同的地点被缓存:
- 浏览器缓存:
- 中间缓存代理:
- 反向缓存: