网站内容策略(网站缓存策略揭秘:WebHTTP协议类型的缓存技术揭秘)
优采云 发布时间: 2022-03-01 14:10网站内容策略(网站缓存策略揭秘:WebHTTP协议类型的缓存技术揭秘)
:网站缓存策略,今天小编要告诉大家,网站缓存策略,什么是网站缓存,相信你不会陌生,它就是cookie,超越视界将从技术角度为大家揭开网站缓存策略的秘密。
在本期《广州百度:网站缓存策略》文章中,我们将讨论网页内容缓存的一些基本概念。这主要包括如何选择缓存策略以确保您的内容被 Internet 范围的缓存正确处理。我们将讨论缓存的好处、副作用以及不同策略可以带来的性能和灵活性的最佳组合。
[标题]
广州百度:网站缓存策略[/caption]
什么是缓存(缓存)?
缓存是一个描述存储可重用资源以加速后续请求的行为的术语。缓存有很多不同的类型,每种都有自己的特点,应用程序缓存和内存中的缓存都是常用的,因为它们可以加速特定的响应。
Web缓存主要在《广州百度:网站缓存策略》文章中描述,是一种不同类型的缓存。Web 缓存是 HTTP 协议的核心功能,可最大限度地减少网络流量并提高用户感知的整体系统响应能力。在内容从服务器传输到浏览器的过程中,每个级别都可以找到缓存。
Web缓存根据特定规则缓存相应HTTP请求的响应。然后,缓存可以直接满足对缓存内容的后续请求,而不是将请求重新发送到 Web 服务器。
益处
有效的缓存技术不仅可以帮助用户,还可以帮助内容提供者。缓存内容分发的好处包括:
• 减少网络开销:内容可以缓存在从内容提供者到内容消费者的网络路径之间的许多不同位置。当内容被缓存在更靠近内容消费者的地方时,由于缓存的存在,请求不会消耗额外的网络资源。
● 更快的响应:缓存可以使内容更快地可用,因为它不必经过整个网络往返。缓存放置在更靠近用户的位置,例如浏览器缓存,使得内容检索几乎是即时的。
• 在相同硬件上提高速度:对于保存原创内容的服务器,通过允许积极的缓存策略,可以从硬件中挤出更多的性能。内容所有者可以利用分发路径中的强大服务器来处理特定内容负载的冲击。
● 网络中断时内容仍然可用:通过一定的策略,缓存可以保证在源站不可用时,用户仍然可以使用相应的内容。
可以缓存什么?
某些内容比其他内容更有可能被缓存。对于大多数网站来说,一些适合缓存的内容如下:
●标志和商标图像
● 普通不变的图像(例如,导航图标)
● CSS 样式表
● 普通Java文件
●可下载的内容
●媒体文件
这些文件往往很少更改,因此长时间缓存它们会受益。
必须注意缓存中的一些项目:
● HTML 页面
●更改后的图像将被替换
● 经常修改的 Java 和 CSS 文件
●需要经过身份验证的cookies才能访问的内容
有些内容不应该被缓存:
●与敏感信息相关的资源(*敏*感*词*等)
● 与用户相关且经常变化的数据
除了上述一般规则外,通常还需要指定一些规则来更好地缓存不同种类的内容。例如,如果登录的用户都看到相同的 网站 视图,则该页面应该被缓存到任何地方。如果登录用户在一段时间内看到该站点的用户特定视图,您应该允许用户的浏览器缓存该数据,并且不允许任何中间节点缓存该视图。
Web 内容的缓存位置
Web 内容缓存在整个分发路径的许多不同位置:
● 浏览器缓存:Web 浏览器本身维护一个小缓存。通常,浏览器使用策略来指示缓存最重要的内容。这可能是与用户相关的内容,或者可能会被重新请求并且下载成本很高。
● 中间缓存代理:客户端和您的基础设施之间的任何服务器都可以按预期缓存一些内容。这些缓存可能由 ISP(互联网服务提供商)或其他独立组织提供。
● 反向缓存:您的服务器基础架构可以为后端服务实现自己的缓存。如果实现了缓存,则可以在处理请求的地方返回相应的内容,而无需为每个请求使用后端服务。
以上位置通常可以根据自己的缓存策略和内容源的缓存策略缓存一些对应的内容。
一些可用于指示内容缓存策略的 Cache-Control 选项如下:
● no-cache:该指令指示所有缓存的内容必须在新请求到达时重新验证,然后才能发送到客户端。该指令实际上将内容立即标记为过期,但允许通过身份验证重新进行身份验证以避免重新下载整个内容。
● no-store:该指令表示不能以任何方式缓存缓存的内容。适合在回复敏感信息时设置。
● public:将内容标记为公开,即可以被浏览器和其他中间节点缓存。通常,对于使用 HTTP 身份验证的请求,默认情况下会将响应标记为私有。公共标签将覆盖此设置。
● 私有:将内容标记为私有。私有数据可以被用户的浏览器缓存,但不能被任何中间节点缓存。它通常用于与用户相关的数据。
● max-age:此设置表示缓存内容的最长期限,超过该期限后必须在源服务器上进行验证或重新下载。这个选项在很大程度上取代了现代浏览器中的 Expires 标头,浏览器也将其作为确定内容新鲜度的基础。此选项的值以秒表示,最长为一年(31536000 秒)的新鲜期。
● s-maxage:此选项与max-age 非常相似,它指定内容可以缓存多长时间。不同的是,这个选项只在中间节点的缓存中有效。结合这两个选项可以构建更灵活的缓存策略。
● must-revalidate:指定必须严格遵循max-age、s-maxage 或Expires 头指定的新鲜度信息。它可以防止在网络中断等场景中使用缓存的数据。
● proxy-revalidate:与上述选项作用相同,但只适用于中间代理节点。在这种情况下,用户的浏览器可以在网络中断的情况下使用过期的内容,但中间缓存的内容不能用于此目的。
● no-transform:此选项告诉缓存在任何情况下都不会出于性能原因修改接收到的内容。这意味着缓存不允许压缩接收到的内容(在压缩版本中还没有从源服务器接收到)并发送它。
这些选项可以以不同的方式组合以获得不同的缓存行为。一些互斥值如下:
no-cache、no-store 和由前面未提及的其他选项指定的常见缓存行为
●公共和私人
如果同时设置了 no-store 和 no-cache,则 no-store 取代 no-cache。对于未授权请求的响应,public 是隐式设置。对于授权请求的回复,隐含私有选项。可以通过在 Cache-Control 标头中指定相应的相反选项来覆盖它们。
制定缓存策略
在理想的世界中,任何东西都可以被尽可能多地缓存,而你的服务器只需要偶尔提供一些验证内容。但这在现实中很少发生,因此您应该尝试设置一些合理的缓存策略来平衡长期缓存和站点更改的需求。
常见问题
在许多情况下,由于内容的生成方式(例如基于每个用户的动态)或内容的性质(例如敏感的*敏*感*词*),不应缓存内容。很多管理员在设置缓存时可能会面临的另一个问题是外部缓存中的数据没有过期,而是生成了新版本的数据。
这些是影响缓存性能和您提供的数据准确性的常见问题。但是,我们可以通过开发提前预测这些问题的缓存策略来缓解这些问题。
一般建议
尽管您的实际情况会指导您选择缓存策略,但以下建议可以帮助您做出一些合理的决定。
在您担心要使用哪个特定标头之前,有一些特定步骤可以帮助您提高缓存命中率。一些建议如下:
● 为图像、CSS 和共享内容创建特定文件夹:将内容放在特定文件夹中,您可以轻松地从站点的任何页面引用这些内容。
对相同的内容使用相同的 URL:由于缓存使用内容请求中的主机名和路径作为键,因此您应该确保所有页面以相同的方式引用该内容,前面的建议使这更容易到达。
● 尽可能使用CSS 图像拼接:对于图标和导航之类的东西,使用CSS 图像拼接可以减少渲染页面所需的请求往返,并允许拼接长时间缓存。
● 尽可能本地化宿主脚本和外部资源:如果你使用Java脚本和其他外部资源,如果上游没有提供合适的缓存头,你应该考虑将它们放在你自己的服务器上。您应该了解上游的任何更新,以便更新您的本地副本。
● 为缓存内容采集文件摘要:CSS 和Java 文件等静态内容通常更适合采集文件摘要。这意味着向文件名添加唯一标识符(通常是文件的哈希)可以绕过缓存并确保在文件修改后检索到新内容。有许多工具可以帮助您创建文档摘要和修改 HTML 文档中的引用。
对于不同的文件正确选择不同的header,以下可以作为一般参考:
• 允许所有缓存存储一般内容:静态内容以及非用户相关内容应缓存在分发链中的所有节点。这使中间节点能够将该内容回复给多个用户。
• 允许浏览器缓存与用户相关的内容:对于每个用户的数据,在用户自己的浏览器中缓存通常是可以接受且有益的。缓存在用户自己的浏览器中,可以让用户在下次浏览时瞬间阅读,但这些内容不适合缓存在任何中间代理节点中。
●将时间敏感的内容作为特例:如果你的数据是时间敏感的,那么相比以上两个引用,你应该把这些数据作为特例来处理,以确保在危急情况下不会使用过期的数据。例如,如果您的网站有一个购物车,它应该立即反映购物车的内容。根据内容的特性,可以在 Cache-Control 标头中使用 no-cache 或 no-store 选项。
• 始终提供验证器:验证器可以刷新过期内容而无需重新下载。设置 ETag 和 Last-Modified 标头将允许缓存向源服务器验证内容并刷新该内容的新鲜度以在内容未被修改时减少负载。
● 支持的内容设置较长的新鲜期:为了更有效地使用缓存,一些支持的内容应该设置较长的新鲜期。这通常更适合用户请求呈现 HTML 页面的图像和 CSS 等内容。与文件摘要一起,设置延长的新鲜期将允许缓存长时间存储这些资源。如果资源发生变化,修改后的文件摘要将使缓存数据失效并触发新内容的下载。届时,新支持的内容将继续缓存。
●为父内容设置较短的新鲜期:为使之前的模式正常工作,容器类的内容应相应设置较短的新鲜期,或者不全部缓存。这通常是用于其他辅助内容的 HTML 页面。该 HTML 页面将被频繁下载,使其能够响应更改。因此可以尽可能多地缓存支持性内容。
关键是要在一方面尽可能多地缓存和保留将来在发生更改时更改整个内容的机会之间取得平衡。您的网站应该同时具备:
● 尝试缓存内容
●可重新验证的具有短新鲜期的缓存内容
● 完全没有缓存的内容
这样做的目的是将尽可能多的内容移动到第一类(尽可能缓存),同时保持可接受的缓存命中率。