7. ABNF List Extension: #rule (ABNF 列表扩展: #规则)
在 [RFC5234] 的 ABNF 符号中定义的语法规则是用于 HTTP 头部字段的常见构造。本节定义了 # 构造, 用于定义以逗号分隔的列表元素。虽然本规范的其他地方可能会提到这种构造为 "#rule", 但它只是在 ABNF 规则中使用 # 运算符定义的一种命名约定。
带有 # 运算符的语法构造与使用 * 运算符相同, 但要求至少有一个列表元素, 并且列表元素由一个或多个逗号 (",") 和可选的空白 (OWS) 分隔。
#element => [ ( "," / element ) *( OWS "," [ OWS element ] ) ]
1#element => *( "," OWS ) element *( OWS "," [ OWS element ] )
例如, 以下规则:
set-cookie = 1#set-cookie-string
允许以下任何一种值:
set-cookie: cookie1
set-cookie: cookie1, cookie2
set-cookie: cookie1, cookie2, cookie3
空元素不会贡献到列表的计数中。例如, 给定这些 ABNF 产生式:
example-field = 1#token
token = 1*tchar
接收方可以接受以下值:
example-field: foo, bar
example-field: foo,, bar
example-field: foo ,, bar
对于没有最小或最大元素数量的规则, 以下形式:
#element => [ element ] *( OWS "," [ OWS element ] )
与以下形式等效:
*( "," OWS ) [ element *( OWS "," [ OWS element ] ) ]
注意: 在 [RFC2616] 中, # 运算符的定义是不同的, 它允许空元素出现在列表中。这个定义已经在本规范中被澄清以更准确地反映实际使用情况。
发送方不应该生成空列表元素。发送方必须生成具有至少一个非空元素的列表。
📍 Section 7 翻译完成