为什么缓存控制请求的HTTP头?

Sup*_*hne 5 http httpclient cache-control http-caching httpserver

我最近浏览了这篇文章.它说不仅响应,请求还可以包括cache-control选项.

虽然我明白,它可以被服务器响应有意义地使用,我不清楚理解为什么它们在请求中是需要的.不幸的是,我在互联网上找不到任何能解决我问题的方法.

有谁有想法?

cas*_*lin 6

HTTP/1.1 缓存和控制缓存行为的相关标头在RFC 7234中定义。不过,缓存是 HTTP 的一个完全可选的功能。


所述Cache-Control报头被用来指定指令用于沿着所述请求/响应链高速缓存。此类缓存指令是单向的,因为请求中指令的存在并不意味着响应中将给出相同的指令。

缓存指令由令牌标识,不区分大小写进行比较,并有一个可选参数,可以使用令牌和带引号的字符串语法。对于下面定义的定义参数的指令,接收者应该接受这两种形式,即使记录为首选。对于本规范未定义的任何指令,接收者必须接受两种形式。

Cache-Control   = 1#cache-directive

cache-directive = token [ "=" ( token / quoted-string ) ]
Run Code Online (Sandbox Code Playgroud)

在下面找到可以在请求头中使用的指令Cache-Control

5.2.1.1. 最大年龄

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

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

5.2.1.2. 最大陈旧

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

该指令使用参数语法的标记形式:例如, max-stale=10not max-stale="10"。[...]

5.2.1.3. 最新鲜

[...] min-freshrequest 指令表明客户端愿意接受一个响应,其新鲜度生命周期不小于其当前年龄加上指定的时间(以秒为单位)。[...]

该指令使用参数语法的标记形式:例如, min-fresh=20not min-fresh="20"。[...]

5.2.1.4. 无缓存

no-cache请求指令表示缓存不得使用存储的响应,以满足无源服务器上验证成功的请求。

5.2.1.5. 无店

所述no-store请求指令表示的高速缓存必须不存储任一此请求或它的任何响应的任何部分。[...]

5.2.1.6. 无变换

所述no-transform请求指令表明一个中介(它是否实现了一个高速缓存中)必须不变换有效载荷[...]。

5.2.1.7. 仅缓存

所述only-if-cached请求指令表示该客户端仅希望得到一个存储的响应。[...]

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