RFC文档ABNF语法中#、*、[]等特殊符号含义咨询
RFC ABNF语法符号释义
以下是你提到的所有RFC语法符号的具体规则,基于ABNF(增强巴科斯-瑙尔范式)及HTTP协议扩展规则说明:
1. 1#transfer-coding、1#product中1#的含义
#是HTTP系列RFC在标准ABNF基础上扩展的逗号分隔列表修饰符,专门用来定义协议中常见的逗号分隔参数格式:
- 基础格式为
[最小个数]#[最大个数]元素,缺省最小为0,缺省最大为无限制 1#代表至少要有1个对应元素,多个元素之间用逗号(允许前后带空白字符)分隔- 示例:
1#product对应实际值可以是curl/7.68.0,也可以是nginx/1.24.0, openresty/1.21.4
2. 1*( product | comment )、1*DIGIT中1*的含义
这是标准ABNF的重复次数修饰符,通用格式为[最小出现次数]*[最大出现次数]元素:
- 最小次数缺省值为0,最大次数缺省值为无限制
1*代表对应元素至少出现1次,最多可以出现任意次数- 示例:
1*DIGIT对应至少1位数字,1、1234都符合要求,空字符串不符合
3. [ comment ]中方括号[]的作用
方括号是ABNF的可选内容标记,包裹的内容允许出现0次或1次,等价于0*1(内容)。比如[ comment ]就代表该位置可以加注释,也可以不加注释。
4. *( ";" chunk-ext-name [ "=" chunk-ext-val ] )中*()的含义
就是重复修饰符*作用于括号内的整个分组规则:
- 这里最小次数缺省为0,最大次数缺省为无限制,代表括号内的整个规则组合,可以出现0次到任意多次
- 对应示例的场景就是块扩展可以不存在,也可以存在多个,每个扩展都以分号开头,可选携带值
5. 嵌套方括号[ abs_path [ "?" query ]]的规则
确实是嵌套可选内容,规则为内层可选内容的生效前提是外层可选内容存在,该示例的合法情况只有三种:
- 既没有abs_path,也没有query部分
- 只有abs_path,没有后面的query部分
- 同时存在abs_path和后面的
?加query
不存在只有query没有abs_path的合法情况。
6. 2DIGIT、1DIGIT的含义及规范来源
这是ABNF的固定次数简写规则,n元素等价于n*n元素,也就是元素必须恰好出现n次:
2DIGIT代表恰好2位数字,1DIGIT代表恰好1位数字- 相关规则出自RFC5234(增强巴科斯范式官方规范),其中
DIGIT是ABNF预定义的核心规则,代表0-9的阿拉伯数字
额外符号释义
1*2DIGIT:最少1位数字,最多2位数字,0、99符合要求,100不符合2*4DIGIT:最少2位数字,最多4位数字,10、9999符合要求,9、10000不符合
内容的提问来源于stack exchange,提问作者Lance Pollard
相关产品推荐
相关产品推荐

