0

根据:RFC 2068

通过用括号将注释文本括起来,可以将注释包含在某些 HTTP 标头字段中。仅允许在包含“comment”作为其字段值定义的一部分的字段中使用注释。在所有其他字段中,括号被视为字段值的一部分。

这些是相关的规则:

comment        = "(" *( ctext | comment ) ")"
ctext          = <any TEXT excluding "(" and ")">

评论里面的评论?这似乎很愚蠢。我的主张是:(1)评论中不需要嵌套评论。(2) 如果是这样,评论规则最好表述为:

comment        = "(" *( ctext ) ")"

我的主张正确吗?如果没有,嵌套注释何时实际使用?其他图书馆在乎吗?你知道这方面的历史/评论吗?(尝试使用“RFC 2068 嵌套注释”进行 Web 搜索并不是很有帮助。)

(动机:我很在意,因为我正在为 RFC 2068 编写一个词法分析器(使用 Ragel)。如果评论真的需要可嵌套,那就意味着递归规则,据我所知,这不是 Ragel 的最佳选择。我读过一些迹象表明 Ragel 在某些情况下可以处理递归规则,但我不太清楚。另外,我也在查看 Unicorn Ragel 代码,这很有帮助。)

PS 为简单起见,我现在有意不深入研究另一条规则的细节quoted-string

2012-08-20 更新:下面的一个答案有用地引用了 RFC 2068 的较新版本。这有助于澄清解析规则。但是,它没有解决我的其他观点:

  1. 我没有看到任何令人信服的理由让规范在评论中包含评论。这似乎是不必要的——也许是过度设计的,也许是被忽视的。这既烦人又重要,因为递归规则使格式成为非常规语言。这是规范编写者通常应该注意的事情,对吧?

  2. 我还没有(还没有?)看到在评论中使用评论的例子。如果是这样的话,世界已经含蓄地说“嵌套评论无关紧要”。

4

1 回答 1

1

查看 RFC2616:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html

Comments can be included in some HTTP header fields by surrounding the comment
text with parentheses. Comments are only allowed in fields containing "comment" 
as part of their field value definition. In all other fields, parentheses are 
considered part of the field value.

       comment        = "(" *( ctext | quoted-pair | comment ) ")"
       ctext          = <any TEXT excluding "(" and ")">

所以是的,嵌套注释是明确允许的:)

于 2012-08-17T19:27:09.420 回答