translate part of article

This commit is contained in:
wwy-hust 2015-05-12 23:30:54 +08:00
parent b284b09b5e
commit fa3765e0a4

View File

@ -81,7 +81,33 @@ Web
Web内容会在整个分发路径中的许多不同的地点被缓存
- **浏览器缓存**
- **中间缓存代理**
- **反向缓存**
- **浏览器缓存**Web浏览器自身会维护一个小型缓存。典型地浏览器使用一种策略指示缓存最重要的内容。这可能是用户相关的内容或可能会再次请求且下载代价较高。
- **中间缓存代理**任何在客户端和您的基础架构之间的服务器都可以按期望缓存一些内容。这些缓存可能由ISP网络服务提供者或者其他独立组织提供。
- **反向缓存**:您的服务器基础架构可以为后端的服务实现自己的缓存。如果实现了缓存,那么便可以在请求接触点返回相应的内容而不用每次请求都使用后端服务。
上面的这些位置通常都可以根据它们自身的缓存策略和内容源点的缓存策略缓存一些相应的内容。
缓存头部
--------
缓存策略依赖于两个不同的因素。缓存实体本身需要决定是否应该缓存可接受的内容。它可以只缓存部分可以缓存的内容,但不能缓存超过限制的内容。
缓存行为主要由缓存策略决定而缓存策略由内容拥有者设置。这些策略主要由特定的HTTP头部来清晰的表达。
经过不同HTTP协议的迭代一些不同的聚焦在缓存的头部出现了它们的复杂度各不相同。下面列出了那些你也许仍应该注意的
- **`Expires`**:尽管使用范围相当有限,但`Expires`头部是非常简洁明了的。通常它设置一个未来的时间内容会在此时间过期。这时任何对同样内容的请求都应该回到原始服务器处。这个头部或许仅仅最适合回退模式fall back
- **`Cache-Control`**:这是`Expires`的一个更加现代化的替换物。它已被很好的支持,且拥有更加灵活的实现。在大多数案例中,它比`Expires`更好,但同时设置两者的值也无妨。稍后我们将讨论您可以设置的`Cache-Control`的详细选项。
- **`ETag`**`ETag`用于缓存验证。源服务器可以在首次服务一个内容时为该内容提供一个独特的`ETag`。当一个缓存需要验证这个内容是否即将过期,他会将相应的`ETag`发送回服务器。源服务器或者告诉缓存内容是一致的,或者发送更新后的内容(带着新的`ETag`)。
- **`Last-Modified`**:这个头部指明了相应的内容最后一次被修改的时间。它可能会作为保证内容新鲜度的验证策略的一部分被使用。
- **`Content-Length`**:尽管并没有明确的在缓存中被涉及,`Content-Length`头部在设置缓存策略时很重要。某些软件如果不提前获知内容的大小以留出足够空间,则会拒绝缓存该内容。
- **`Vary`**:缓存系统通常使用请求的主机和路径作为存储该资源的键。`Vary`头部可以被用来在决定一个请求是否是请求同样的内容时提醒缓存系统注意另一个附加的头部。它通常被用来告诉缓存系统同样的使用`Accept-Encoding`头部作为键,因此缓存系统能够区分压缩和未压缩的内容。
### Vary头部的隐语
`Vary`头部提供给您存储同一个内容不同版本的能力。代价是稀释了缓存的入口。
在`Accept-Encoding`的案例中,设置`Vary`头部允许压缩和未压缩的内容拥有决定性的区别。这在服务某些不能处理压缩数据的浏览器时很重要,它可以保证基本的使用。`Accept-Encoding`是`Vary`的不错的候选值是因为它只有两到三个可用的值这一特性。