Http 简明教程

HTTP - Caching

HTTP 通常用于分布式信息系统,其中可以通过使用响应缓存提高性能。HTTP/1.1 协议包含用于执行缓存工作的若干元素。

HTTP/1.1 中缓存的目标是消除在许多情况下发送请求的需求,并消除在许多其他情况下发送完整响应的需求。

HTTP/1.1 中基本的缓存机制是向缓存发出的隐式指令,其中服务器指定了过期时间和验证器。为此我们使用 Cache-Control 头。

Cache-Control 头允许客户端或服务器在请求或响应中传输各种指令。这些指令通常会覆盖默认缓存算法。缓存指令在一个逗号分隔列表中指定。例如:

Cache-control: no-cache

客户端可在其 HTTP 请求中使用以下缓存请求指令:

S.N.

缓存请求指令及说明

1

*no-cache*缓存不得在未与源服务器成功重新验证的情况下,使用响应来满足后续请求。

2

*no-store*缓存不应该存储关于客户端请求或服务器响应的任何信息。

3

*max-age = 秒*表示客户端愿意接受其过期时间不超过指定秒数的响应。

4

*max-stale [ = 秒 ]*表示客户端愿意接受其有效期已超过的响应。如果给出秒数,则不应超过该时间。

5

*min-fresh = 秒*表示客户端愿意接受其新鲜度时间不小于其当前时间加上指定秒数的响应。

6

*no-transform*不转换实体主体。

7

*only-if-cached*不检索新数据。缓存仅当其中包含该文档时才可发送该文档,而不应与原始服务器联系以查看是否存在较新的副本。

服务器可在其 HTTP 响应中使用以下缓存响应指令:

S.N.

缓存响应指令及其说明

1

*public*表示任何缓存都可以缓存响应。

2

*private*表示响应消息的全部或部分针对单个用户,不得由共享缓存缓存。

3

*no-cache*缓存不得在不成功地重新向原始服务器验证的情况下使用响应来满足后续请求。

4

*no-store*缓存不应该存储关于客户端请求或服务器响应的任何信息。

5

*no-transform*不转换实体主体。

6

*must-revalidate*缓存必须验证陈旧文档的状态后才能使用它,并且不应使用过期的文档。

7

*proxy-revalidate*proxy-revalidate 指令具有与 must-revalidate 指令相同的意思,但它不适用于非共享用户代理缓存。

8

*max-age = 秒*表示客户端愿意接受其过期时间不超过指定秒数的响应。

9

*s-maxage = 秒*此指令指定的最大过期时间将覆盖 max-age 指令或 Expires 头指定的最大过期时间。s-maxage 指令始终会被私有缓存忽略。