【问题标题】:what is the exact syntax and semantics of a quoted string in the http1.1 rfc2616http1.1 rfc2616中带引号的字符串的确切语法和语义是什么
【发布时间】:2011-12-14 18:23:16
【问题描述】:

在 HTTP/1.1 标准 rfc2616 中,带引号的字符串定义如下。

quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> )
quoted-pair    = "\" CHAR
CHAR           = <any US-ASCII character (octets 0 - 127)>
qdtext         = <any TEXT except <">>
TEXT           = <any OCTET except CTLs, but including LWS>

有了这个定义,“”似乎是一个文本,因此&lt;"&gt;\&lt;"&gt;(引号、反斜杠、引号)似乎是一个有效的带引号的字符串。但这与正确使用反斜杠作为转义字符相矛盾,甚至可能导致无法明确地确定引用字符串的结尾。我的错误在哪里?

RFC 还声明

LWS            = [CRLF] 1*( SP | HT )
All linear
white space, including folding, has the same semantics as SP. A
recipient MAY replace any linear white space with a single SP before
interpreting the field value or forwarding the message downstream.

我已经阅读了即使是带引号的字符串中的 LWS 也可以被 SP 替换的解释。如果我从字面上理解 RFC,那就是它所说的。我对此感到困惑,因为这意味着引用的字符串“”、“\n”、“\n\t \t \t”……都是一样的。那些引用的字符串真的不能在语义上区分吗?

【问题讨论】:

  • 有关信息,如果有人查找引用字符串(或其他任何内容)的语法,RFC2616 已被 RFC7230-7235 (source) 废弃,并且包含更正的quoted-string 语法的是RFC7230。

标签: http rfc rfc2616


【解决方案1】:

关于问题 1:这是 RFC 中的错误。

请参阅 HTTPbis WG ticket 31HTTPbis, Part 1, Section 3.2.3

关于问题 2:请参阅 HTTPbis Part 1, 3.2.1 - 所以不,您无法区分这些。

【讨论】:

  • 这回答了转义问题,LWS语义问题是什么?
  • 首先,感谢您的问答,它帮助了我,我在工作中wrote a summary。 @johannes 是的,他们不能。您可以反斜杠转义引号字符串中的所有文字空格和制表符,因此 $' \t' 变为 $'\\ \\ \\\t'(或者,如果您想要更直观的表示,··→ 变为 "\·\·\→"),以及换行符和其他控制字符只是迷路了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2019-09-13
  • 2013-01-10
  • 1970-01-01
  • 2011-02-22
  • 2019-01-05
相关资源
最近更新 更多