为什么请求需要使用缓存控制HTTP头?

8
我最近看了这篇文章:这里。它说,不仅响应可以使用cache-control选项,请求也可以包含这些选项。
虽然我理解服务器响应可以有意义地利用这些选项,但我不清楚为什么在请求中也需要它们。不幸的是,我在互联网上找不到任何能解决问题的答案。
有没有人有主意?
1个回答

8
HTTP/1.1缓存及其相关的控制缓存行为的头部在RFC 7234中定义。虽然缓存是HTTP的一个完全可选的特性。

Cache-Control头部用于指定请求/响应链中缓存的指令。这些缓存指令是单向的,即请求中存在指令并不意味着相同的指令会在响应中给出。

Cache directives are identified by a token, to be compared case-insensitively, and have an optional argument, that can use both token and quoted-string syntax. For the directives defined below that define arguments, recipients ought to accept both forms, even if one is documented to be preferred. For any directive not defined by this specification, a recipient MUST accept both forms.

Cache-Control   = 1#cache-directive

cache-directive = token [ "=" ( token / quoted-string ) ]
以下是可以在请求 Cache-Control 头部中使用的 指令

5.2.1.1. max-age

[...] max-age 请求指令表示客户端不愿意接受响应的年龄大于指定秒数的响应。[...]

该指令使用参数语法的标记形式:例如,max-age=5 而不是 max-age="5"。[...]

5.2.1.2. max-stale

[...] max-stale请求指令表示客户端愿意接受已超过其新鲜度生命周期的响应。 [...]

该指令使用参数语法的令牌形式:例如,max-stale=10而不是max-stale="10"。 [...]

5.2.1.3. min-fresh

[...] min-fresh请求指令表示客户端愿意接受其当前年龄加上指定秒数后的新鲜度生命周期不少于的响应。 [...]

该指令使用参数语法的令牌形式:例如,min-fresh=20而不是min-fresh="20"。 [...]

5.2.1.4. no-cache

no-cache请求指令表示缓存在未经过源服务器的成功验证后,不能使用已存储的响应来满足请求。

5.2.1.5. no-store

no-store请求指令表示缓存不得存储此请求或任何响应的任何部分。[...]

5.2.1.6. no-transform

no-transform请求指令表示中间人(无论是否实现缓存)不得转换负载[...]。

5.2.1.7. 仅从缓存获取

only-if-cached 请求指示客户端只希望获取已存储的响应。[...]

类似地,RFC 7234 还定义了可以在响应中使用的 指令,用于 Cache-Control 标头。


你的回答很符合我的预期。顺便问一下,你经常使用这些请求吗?还是很少见的情况? - Supun Wijerathne
1
@SupunWijerathne 缓存是HTTP的完全可选功能。因此,您不需要实现它。老实说,我从未为请求使用过这样的指令,但这并不意味着我永远不会使用它们 :) - cassiomolin
请求缓存控制头/指令是在您禁用开发工具中的缓存时浏览器使用的。 - gaurav5430

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接