Web Caching Basics: Terminology,

2020-10-07  本文已影响0人  _志铭

原文地址:Web Caching Basics: Terminology, HTTP Headers, and Caching Strategies

介绍

智能的内容缓存是改善网站访问体验的最有效方法之一。 缓存或临时存储来自先前请求的内容,是HTTP协议中实现的核心内容交付策略的一部分。 整个传递路径中的组件都可以缓存所有项目,以加快后续请求的速度,具体取决于为内容声明的缓存策略。

在本指南中,我们将讨论Web内容缓存的一些基本概念。 这将主要涵盖如何选择缓存策略以确保整个Internet的缓存都能正确处理您的内容。 我们将讨论缓存所带来的好处,需要注意的副作用以及为保障性能和灵活性的最佳组合而采用的不同策略。

什么是缓存?

缓存是用于存储可复用响应来使后续的请求更快的术语。 有许多不同类型的缓存可用,每种缓存都有自己的特征。 应用程序缓存和内存缓存均因其加速某些响应的能力而广受欢迎。

Web缓存是本指南的重点,它是另一种类型的缓存。 Web缓存是HTTP协议的核心设计功能,旨在最大程度地减少网络流量,同时改善整个系统的感知响应能力。 从原始服务器到浏览器的内容旅程的每个级别都可以找到缓存。

Web缓存通过根据某些规则缓存请求的HTTP响应来工作。 然后,可以从更靠近用户的缓存中满足对缓存内容的后续请求,而不是将请求一直发送回Web服务器。

好处

有效的缓存有助于内容使用者和内容提供者。 缓存为内容交付带来的一些好处是:

术语

在处理缓存时,可能会遇到一些您可能不熟悉的术语。 以下是一些较常见的:

什么可以被缓存?

某些内容比其他内容更易于缓存。 对于大多数网站,一些非常易于缓存的内容是:

这些往往不经常更改,因此它们的缓存可以长时间受益。

对于以下项目,需要小心缓存:

几乎不应该缓存的一些项目是:

除了上述一般规则外,还可以指定一些策略,使您可以适当地缓存不同类型的内容。 例如,如果所有通过身份验证的用户都看到您的站点的相同视图,则可以将该视图缓存到任何地方。 如果经过身份验证的用户看到对用户敏感的网站视图(该视图在一段时间内仍然有效),则您可以告诉用户的浏览器进行缓存,但告诉所有中间缓存不要存储该视图。

web内容的缓存位置

内容可以在整个交付链的许多不同位置进行缓存:

缓存 Headers

缓存策略取决于两个不同的因素。 缓存实体本身可以决定是否缓存可接受的内容。 它可以决定缓存的数量少于允许缓存的数量,但决不能超过。

大部分缓存行为由内容所有者设置的缓存策略确定。 这些策略主要通过使用特定的HTTP headers来阐明。

通过HTTP协议的各种迭代,出现了几种不同的,针对缓存的headers,其复杂程度各不相同。 您可能仍需要注意的内容如下:

关于Vary Header

Vary标头使您能够存储相同内容的不同版本,但要以稀释缓存中的条目为代价。

在Accept-Encoding的情况下,设置Vary标头可以在压缩内容和未压缩内容之间进行严格区分。必须正确地将这些项目提供给无法处理压缩内容的浏览器,并且这是提供基本可用性所必需的。告诉您Accept-Encoding可能是Vary的一个不错的选择的特征是它只有两个或三个可能的值。

乍一看,诸如User-Agent之类的项目似乎是区分移动浏览器和桌面浏览器以服务于您网站的不同版本的好方法。但是,由于User-Agent字符串是非标准的,因此结果可能是中间缓存上相同内容的许多版本,并且缓存命中率非常低。 Vary标头应谨慎使用,尤其是在您无法规范所控制的中间缓存中的请求的情况下(例如,如果您利用内容交付网络,则有可能)。

Cache-Control标志如何影响缓存

上面,我们提到了如何将Cache-Control标头用于现代缓存策略规范。 可以使用此标头设置许多不同的策略指令,多个指令之间用逗号分隔。

可用于指示内容的缓存策略的某些Cache-Control选项包括:

可以以不同的方式组合这些,以实现各种缓存行为。一些相互排斥的值是:

如果两个都存在,则no-store选项取代no-cache。 对于未经身份验证的请求的响应,则暗示为public。 对于对已认证请求的响应,暗含了private。 通过在Cache-Control header中包含相反的选项,可以覆盖这些内容。

制定缓存策略

在理想的情况下,所有内容都可以积极地进行缓存,并且仅偶尔与您的服务器联系以验证内容。 不过,这在实践中并不经常发生,因此您应该尝试设置一些理智的缓存策略,以在实现长期缓存和响应不断变化的站点的需求之间取得平衡。

常见问题

在许多情况下,由于内容的生成方式(每个用户动态生成)或内容的性质(例如敏感的银行信息),无法或不应实施缓存。 许多管理员在设置缓存时面临的另一个问题是,即使已发布了新版本,您旧版本的内容仍然泛滥成灾而尚未过期。

这些都是经常遇到的问题,可能会对缓存性能和所提供内容的准确性产生严重影响。 但是,我们可以通过制定可预见这些问题的缓存策略来减轻这些问题。

一般建议

尽管您的情况将决定您使用的缓存策略,但以下建议可以帮助您做出一些合理的决定。

在担心使用的特定header之前,可以采取某些步骤来增加高速缓存命中率。 一些想法是:

在为不同的项目选择正确的header方面,以下内容可以作为一般参考:

总结

花一些时间来确保您的站点具有适当的缓存策略可能会对您的站点产生重大影响。 通过缓存,您可以减少与重复提供相同内容相关的带宽成本。 您的服务器还可以使用相同的硬件来处理更多的流量。 也许最重要的是,客户将在您的网站上获得更快的体验,这可能会使他们更频繁地返回。 尽管有效的Web缓存不是灵丹妙药,但设置适当的缓存策略可以以最少的工作为您带来可观的收益。

上一篇 下一篇

猜你喜欢

热点阅读