Orion's Studio.

缓存

2018/05/23

原文地址

https://www.mnot.net/cache_docs/

缓存是什么

缓存监视着发送的请求,并保存着诸如HTML页面、图片或文件等回复的备份。当用户再次访问相同的路径时,可以直接从保存的回复中而非服务器上获取。

缓存有哪些好处

  1. 降低延迟————从缓存中获取信息更快,占用更少时间,使得页面更具响应式。

  2. 减少网络传输消耗————因为回复可以被重复利用,故而减少了带宽,也减少了为之付出的金钱,让带宽保持在稳定的水平上并且易于管理。

有哪些类型的缓存

浏览器缓存 Browser Caches

在任何现代浏览器的首选项对话框都中您都能看到“缓存”这一选项。缓存是用您电脑的一部分硬盘存储回复信息。浏览器缓存的规则相当简单。通常对于一次会话而言,缓存会确保回复的新鲜。

在用户点击“后退”按钮或者超链接时缓存就会生效。当您在整个网站使用相同的导航图片时,您几乎可以立刻从浏览器缓存中获取它们。

代理缓存 Proxy Caches

代理缓存使用相同的规则,但规模更大。代理服务器用这一方式为成百上千的用户提供服务。大公司和互联网服务提供商们(ISP)经常在防火墙上设置它们,或作为独立设备(也叫中间人)。

因为代理缓存即不是客户端也不是服务器的一部分,它保存在网络中,所以请求必须以某种方式找到它们。一种方法是使用浏览器的代理设置手动告诉它使用哪一个代理。另一种方法则是使用拦截代理。因为拦截代理保存着底层网络本身定位到的请求,所以客户端不需要进行任何配置,甚至不需要知道它们的存在。

代理缓存是一种共享缓存。它们可以同时被很多用户使用而非一个用户,常用的请求节省了大量时间,所以能极大地降低延迟和减少网络传输消耗。

网关缓存 Gateway Caches

也被称为“反向代理缓存”或“替代(surrogate)缓存”。网关缓存也是中间人,但却并非是由网络管理者而是由网站管理者自己部署的,以便提升他们网站的可扩展性、可靠性和表现性。

请求有多种方式来触发网关缓存,但典型是由负载均衡来实现,对请求来说就好像访问服务器一样。

内容分发网络(CDN)会在整个网络中分发网关缓存并将之贩卖给感兴趣的网站。典型案例是Speedera和Akamai。

本教程聚焦在浏览器缓存和网关缓存上,当然也会涵盖上一些代理缓存。

缓存适合我吗?为什么我要用缓存?

缓存是互联网中最容易被误解的技术之一。因为代理缓存会“隐藏”网站的用户,使得网站管理者很难看到是究竟谁在访问他们的网站,所以他们很担心会失去对网站的控制。

但是不幸的是,如果缓存不存在,为了让用户准确地看到他们的网站他们又不得不使用大量的变量。请不用为此担忧,本教程将会指导您如何在使用缓存的前提下也能获取到用户信息。

还有人担忧缓存可能会提供过时的或陈旧的内容。这也不用担心,本教程会向您展示如何配置服务器来控制缓存的内容。

从另一个角度来说,只要您安排得当,缓存可以让您的网站加载更快,并且能节省服务器和网络的负担。这种差异显而易见:一个没有缓存的网站要耗时数秒来加载,而一个用了缓存的网站可以即刻看到内容。用户青睐于能更快加载出来的网站,并且会更频繁地去访问它们。

许多大型互联网公司仅仅为了让用户更快地访问它们的网站,便耗费了数百万美元去建设服务器来复制它们的内容,这也印证了缓存的作用,并且缓存比服务器而言更加贴近用户。最重要的是,您根本不用为缓存付钱。

不管你喜欢与否,代理缓存和浏览器缓存都会存在。即使您不去配置您的网站,它们也会被缓存管理员用默认的方式所使用。

CDN很有趣,因为不同于代理缓存,它们的网关缓存更贴切被缓存网站的利益,所以不会出现以上的问题。不过即使是使用CDN,也要考虑代理缓存和浏览器缓存。

缓存是如何工作的?

所有缓存都有一套自己的规则,来确定它们何时被使用。有些规则在协议里(HTTP 1.0和1.1)就定义好的,而有些则是通过缓存管理员(浏览器或者代理管理员)设置的。

通常来说,有以下几种规则:

  1. 如果回复头告诉缓存不要保存回复,那么缓存就不会保存。
  2. 如果请求已通过身份验证或者是安全的(比如HTTPS),那么回复就不会通过共享缓存进行保存。
  3. 缓存的回复如果满足以下条件,则被认为是新鲜的(也就是说可以直接被客户端使用而不用经过服务器的检验):
  • 有超时时间或其他的时间控制头设置并满足条件。

  • 最近缓存获取过这个回复,并且上一次改动离现在过了很久。

    新鲜的回复可以直接从缓存中返回,而无须通知服务器。

  1. 如果回复是陈旧的,那么服务器会验证它,或者成功则会告诉缓存这个备份否仍然是有效的。
  2. 在一些特定的情况下————比如说当离线时,缓存可以使用陈旧的回复,而无须通知服务器。

如果回复中没有验证项(ETag或Last-Modified头),也没有明确的新鲜度信息,那么它通常(但不总是)被认为是不能被缓存的。

总之,新鲜度和验证项是检验缓存最重要的方式。新鲜的回复会即刻从缓存中被使用,而验证项能防止重复发送同样的回复。

如何控制缓存

网站开发者和网站管理者可以用一些工具来调整缓存。这可能需要您在配置服务器上亲自花一番功夫,但结果肯定是值得的。之后的章节会详细描述。

HTML Meta标签和HTTP头

网站作者会将描述网站的标签放在文档的<HEAD>部分。这些Meta标签可以将文档标记为不可缓存,或会在一定事件内失效。

Meta标签容易上手,但并不十分有效。因为它只用到了一部分的浏览器缓存,而非代理缓存(因为代理缓存根本不会访问文档)。给一个页面放置一个no-cache Meta标签可能会很诱人,但它不一定能保证新鲜程度。

CATALOG
  1. 1. 原文地址
  2. 2. 缓存是什么
  3. 3. 缓存有哪些好处
  4. 4. 有哪些类型的缓存
    1. 4.1. 浏览器缓存 Browser Caches
    2. 4.2. 代理缓存 Proxy Caches
    3. 4.3. 网关缓存 Gateway Caches
  5. 5. 缓存适合我吗?为什么我要用缓存?
  6. 6. 缓存是如何工作的?
  7. 7. 如何控制缓存
    1. 7.1. HTML Meta标签和HTTP头