【问题标题】:Why cache-control HTTP header for requests?为什么要为请求缓存控制 HTTP 标头?
【发布时间】:2017-11-27 09:33:05
【问题描述】:

我最近浏览了this 的文章。它表示不仅响应,请求还可以包含cache-control 选项。

虽然我理解,它可以被服务器响应有意义地利用,但我不清楚为什么在请求中需要它们。不幸的是,我在互联网上找不到任何问题的答案。

有人有想法吗?

【问题讨论】:

    标签: http httpclient cache-control httpserver http-caching


    【解决方案1】:

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


    Cache-Control 标头用于为请求/响应链中的缓存指定指令。这样的缓存指令是 单向,因为请求中存在指令并不意味着在响应中要给出相同的指令。

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

    Cache-Control   = 1#cache-directive
    
    cache-directive = token [ "=" ( token / quoted-string ) ]
    

    directives 下方查找可用于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

    only-if-cached 请求指令表明客户端只 希望获得存储的响应。 [...]

    以类似的方式,RFC 7234 还定义了directives,可用于Cache-Control 标头的响应中。

    【讨论】:

    • 您的回答完全符合我的预期。作为一个附带问题,我可以知道,您是否经常将这些用于请求?还是非常罕见的情况?
    • @SupunWijerathne 缓存是 HTTP 的完全可选功能。所以你不需要实现它。老实说,我从来没有在请求中使用过这样的指令,但这并不意味着我永远不会使用它们:)
    • 请求缓存控制标头/指令是您在开发工具中禁用缓存时浏览器使用的内容
    猜你喜欢
    • 2020-07-23
    • 2021-12-02
    • 2016-06-29
    • 1970-01-01
    • 2021-11-29
    • 2016-10-30
    • 1970-01-01
    • 2020-04-04
    • 2017-06-01
    相关资源
    最近更新 更多