HTTP缓存控制无缓存字段名称如何分隔?

时间:2018-10-18 12:48:34

标签: http-headers

响应HTML of the toolbar div指令的语法允许使用field-name自变量。

RFC7234#5.2.2.2说:

5.2.2.2.  no-cache

   Argument syntax:

      #field-name

   // ...

   If the no-cache response directive specifies one or more field-names,
   then a cache MAY use the response to satisfy a subsequent request,
   subject to any other restrictions on caching. 

   // ...

规范指出no-cache伪指令可以“指定一个或多个字段名称”。 RFC7230#3.2将field-name定义为令牌。

规范似乎并未涵盖如何分隔/分隔多个字段名称。

如何对Cache-Control无缓存字段名称进行定界/分隔?

没有字段名称的示例(最常用)

Cache-Control: no-cache

具有单个字段名称的示例(从不亲自看到,技术上有效)

Cache-Control: no-cache=foo

多个字段名称?

Cache-Control: no-cache=foo,bar
Cache-Control: no-cache=foo,bar
Cache-Control: no-cache=foo, bar
Cache-Control: max-age=60, private, no-cache=foo, bar, min-age=30
Cache-Control: max-age=60, private, no-cache="foo, bar", min-age=30

对我来说,只有上面的最后一个示例(双引号no-cache)是明确的。

正确的表格是什么?

我问是因为我需要正确地解析任意Cache-Control标头值。

2 个答案:

答案 0 :(得分:0)

我认为可以这样做:

Cache-Control: max-age=60, private, no-cache=foo, no-cache=bar, min-age=30

答案 1 :(得分:0)

RFC在RFC2616#14.9的BNF如下:

  

"no-cache" [ "=" <"> 1#field-name <"> ] ; Section 14.9.1

RFC2616#2.1解释了#规则是一个列表:

  

#rule
  定义了一个构造体“#”,类似于“ *”,用于定义
的列表   元素。完整格式至少是表示“ #element”的
  和最多元素,每个元素之间用一个或多个逗号分隔
  (“,”)和可选的线性空白(LWS)。这使通常的
  列表的形式很容易;
之类的规则   ( LWS元素((* LWS元素“,” * LWS元素)))
  可以显示为
  1#元素

RFC2616#2.2告诉您<">只是意味着"

  

<"> = <US-ASCII double-quote mark (34)>


因此,就像上一个一样,它就是Cache-Control: max-age=60, private, no-cache="foo, bar", min-age=30