2011-10-25 36 views
3

在作爲http1.1標準的rfc2616中,引用字符串定義如下。http1.1中引用字符串的確切語法和語義rfc2616

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

有了這個定義「\」似乎是文本,因此<「> \ <」>(報價,反斜槓,報價)似乎是一個有效的引用字符串。但是,這與正確使用反斜槓作爲轉義字符相矛盾,甚至可能導致無法明確地確定引用字符串的結尾。我的錯誤在哪裏?

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」......都是一樣的。那些引用的字符串是否真的不能在語義上區分?

回答

3

重新提問1:這是RFC中的一個錯誤。

請參閱HTTPbis WG ticket 31HTTPbis, Part 1, Section 3.2.3

重新提問2:參見HTTPbis Part 1, 3.2.1 - 所以不能,你不能區分這些。

+0

這回答了轉義問題,LWS語義問題是什麼? – johannes

+0

首先,感謝這個問答,它幫助了我,並且[寫了一個總結](https://evolvis.org/pipermail/evolvis-platfrm-discuss/2014-November/000675.html)在工作中。 @johannes是的,他們不能。你可以在引用的字符串中將所有文字空間和製表符轉義成反斜槓,所以'$'\ t''變成'$'\\ \\\\'t''(或者,如果你想要更多的視覺表現, ''→'變成''\ \ \ \ \→''),換行符和其他控制字符就會丟失。 – mirabilos