/
791.txt
115 lines (81 loc) · 5.34 KB
/
791.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
* 電子メールにおける quoted-pair
[1] [[RFC822]] では、 [CODE(822)[\[CODE(char)[[[CR]]]][CODE(char)[[[LF]]]]]] で (quote された) [CODE(char)[[[CRLF]]]] を表すことが出来ました。
[2] しかし、 [[RFC2822]] は (RFC 822 からの変更点の章も含めて) >>1 のことに一切触れていません。これは非互換変更に当たります。
[3] [[BruceLilly]] は2003年6月23日に [[ietf-822]]
で、これは意図的なものなのか? RFC 2822 は >>1
の禁止を狙ってるのか? と聞きました。
すると [[ned]] じーさんは、そうだったら良かったのになあと言っております。
[8] [[RFC 822]] の [[BNF]] 構文上は確かに [[CRLF]] を [[quoted-pair]] にすることができるのですが、
3.4.3. は[[注釈]]内の [[quoted-pair]] の [[CRLF]] は直後に [[LWSP-char]] が必要と述べており、
3.4.5 は[[引用文字列]]に関して同様の制約をほのめかしており、
[[domain-literal]] に関する規定はありませんが、 3.2. との整合性を鑑みても、
明らかに [[RFC 822]] の意図は \ + CRLF + LWSP-char によって CRLF を表現できるようにするものでしょう。
[10] この問題は [[RFC Errata]] にも (2013年に!) 報告されています。
[REFS[
- [9] [CITE[RFC Errata Report]] ([TIME[2014-05-18 03:38:27 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=822>
]REFS]
[4]
[[MUA]] や [[MTA]] には [CODE(ABNF)[quoted-pair]] を解しないものがあって困っていましたが、最近では常用されている
MTA・MUA でそういう腐ったものは絶滅したと考えられています。
しかし、現在でも構文解析自体はうまくできるようであっても、
メッセージ一覧の表示時や返信メッセージの作成で[Q[[VAR[○○]]さんは書きました]]のような雛形を用意する時に
[CODE(ABNF)[quoted-pair]] を復号せずに残してしまう困った MUA
が今でもあるようです。
([[名無しさん]] [sage] [WEAK[2005-02-22 01:03:49 +00:00]])
[REFS[
- [21] [CITE@en[RFC 2822 - Internet Message Format]] ([TIME[2014-03-08 23:10:45 +09:00]] 版) <http://tools.ietf.org/html/rfc2822#section-3.2.3>
-- [11] 旧版 [CITE@en[RFC 2822 - Internet Message Format]] ([TIME[2014-03-08 23:10:45 +09:00]] 版) <http://tools.ietf.org/html/rfc2822#section-3.2.2>
]REFS]
[12] [[RFC 2822]] の制約をまとめると、
- [13] [CODE[[[\]]]] の次の[[文字]]としては [[U+0000]]-[[U+007F]] を理解できなければなりません。
- [14] [CODE[[[\]]]] の次の[[文字]]として [[U+0000]], [[U+000A]], [[U+000D]] を生成してはなりません。
- [15] それ以上の制約や非推奨はないようです。
- [16] [CODE[[[\]]]] のあとに [[CR]] と [[LF]] が続く列も理解できなければなりません。
[7]
[[RFC 5335]] により、 [CODE(MIME)@en[[[message/global]]]]
においては [CODE(ABNF)@en[[[utf8-quoted-pair]]]]
として [[UTF-8]] の使用が認められるようになりました ([[RFC 5335]] 4.3)。
;; ただし、 [CODE(MIME)@en[[[message-id]]]] では認められていません。
[17] これは [[RFC 2822]] (>>12) に、 [[U+0080]]-[[U+10FFFF]] を追加するものです。
[REFS[
- [18] [CITE@en[RFC 5335 - Internationalized Email Headers]] ([TIME[2014-03-09 12:10:16 +09:00]] 版) <http://tools.ietf.org/html/rfc5335#page-7>
]REFS]
[20] [[RFC 6532]] (>>19) も同様に [[U+0080]]-[[U+10FFFF]] を追加するものです。
[REFS[
- [19] [CITE@en[RFC 6532 - Internationalized Email Headers]] ([TIME[2014-03-09 10:33:13 +09:00]] 版) <http://tools.ietf.org/html/rfc6532>
]REFS]
* HTTP における quoted-pair
** 仕様書
[REFS[
- [22] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-3.2.6>
]REFS]
** 文脈
[24] [[引用文字列]]と[[注釈]]で使えます。
** 構文
[23] 構文は次のように定義されています [SRC[>>22]]。
[PRE(ABNF code)[
quoted-pair = "\" ( [[HTAB]] / [[SP]] / [[VCHAR]] / [[obs-text]] )
]PRE]
[26] [[引用文字列]]では、 [CODE["]] と [CODE[\]] 以外では [[quoted-pair]]
を[[生成]]する[['''べきではありません''']] [SRC[>>22]]。
[27] [[注釈]]では、 [CODE[(]], [CODE[)]], [CODE[\]] 以外では [[quoted-pair]]
を[[生成]]する[['''べきではありません''']] [SRC[>>22]]。
** 構文解析
[25] [[受信者]]は、値を処理するときは、 [CODE[\]]
の後の[[オクテット]]に置換して扱わなければ[['''なりません''']]
[SRC[>>22]]。
** 歴史
[5]
[CITE@en[RE: Escaping <\> in HTTP Digest (RFC 2617)]] ([[Eric Lawrence]] 著, [CODE[2007-03-24 03:59:52 +09:00]] 版) <http://lists.w3.org/Archives/Public/ietf-http-wg/2007JanMar/0302.html>
([[名無しさん]] [WEAK[2007-03-26 10:21:30 +00:00]])
[6]
[CITE@en[RE: Escaping <\> in HTTP Digest (RFC 2617)]] ([[Eric Lawrence]] 著, [CODE[2007-03-24 05:24:38 +09:00]] 版) <http://lists.w3.org/Archives/Public/ietf-http-wg/2007JanMar/0303.html>
[FIG(quote)[
[FIGCAPTION[
[28] [CITE@en[RFC 2486 - The Network Access Identifier]]
([TIME[2015-10-16 11:34:22 +09:00]] 版)
<https://tools.ietf.org/html/rfc2486#page-4>
]FIGCAPTION]
>
> char = c / ( "\" x )
]FIG]