/
425.txt
532 lines (414 loc) · 26.1 KB
/
425.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
[44] [DFN[[CODE(MIME)[Content-Disposition]]]]
[[実体頭欄]]には、
[[実体]]の[RUBYB[配置] [disposition]]についての情報を記述します。
この頭欄は、ある実体について、たとえば
- [[添付]]データか、[[行内]]データか、それとも ...
- 保存時のおすすめの[[ファイル名]]
のような[Q[性質]]を記述できます。
[50] この頭欄は元々は [ABBR[[[MIME]]] [多目的インターネット・メイル拡張]]
で使用するために定義されましたが、
[ABBR[MIME] [多目的インターネット・メイル拡張]]
と似た仕組みを採用している
[ABBR[[[HTTP]]] [ハイパーテキスト転送プロトコル]]
や [ABBR[HTTP] [ハイパーテキスト転送プロトコル]]
を流用した [ABBR[[[SIP]]] [セッション初期化プロトコル]]
などでも使用されています。
* 仕様書
[52] [CODE(MIME)[Content-Disposition]] 欄は、
[ABBR[[[MIME]]] [多目的インターネット・メイル拡張]],
[ABBR[[[HTTP]]] [ハイパーテキスト転送プロトコル]],
[ABBR[[[SIP]]] [セッション初期化プロトコル]]
など様々なプロトコルで使用されています。
それぞれのプロトコルの歴史的・技術的その他の理由で、
細かい規定などに様々な違いがあります。
[REFS[
- [11] '''[CITE@en[RFC 2183 - Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field]] ([TIME[2014-09-07 04:20:15 +09:00]] 版) <http://tools.ietf.org/html/rfc2183>'''
-- [42] [CITE@en[RFC 2183 - Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field]] ([TIME[2014-09-07 04:20:15 +09:00]] 版) <http://tools.ietf.org/html/rfc2183#section-2.8>
- [12] [CITE[RFC Errata Report]] ([TIME[2014-10-29 05:07:24 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=2183>
- [13] [CITE@en[RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)]] ([TIME[2014-10-13 05:17:21 +09:00]] 版) <http://tools.ietf.org/html/rfc6266>
-- [85] [CITE@en[RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)]] ([TIME[2014-10-13 05:17:21 +09:00]] 版) <http://tools.ietf.org/html/rfc6266#section-3>
- [14] [CITE@en[RFC 3261 - SIP: Session Initiation Protocol]] ([TIME[2014-08-15 14:48:03 +09:00]] 版) <http://tools.ietf.org/html/rfc3261#section-20.11>
- [7] [CITE[Content Disposition Values and Parameters]] ([TIME[2014-01-30 17:45:28 +09:00]] 版) <http://www.iana.org/assignments/cont-disp/cont-disp.xhtml>
-- 旧 [CITE[MAIL CONTENT DISPOSITION Values and Parameters]] <http://www.iana.org/assignments/mail-cont-disp>
]REFS]
* 意味
[15] [[MIME]] では [CODE(MIME)@en[[[multipart/*]]]] により複数の[[本体部分]]を混合させることができますが、
それをどう表示するか、例えば[[添付ファイル]]として表示するか、
一連の文書として埋め込んで表示するかは [[MIME]] 本体では表現できません。
[CODE(MIME)@en[[[Content-Disposition:]]]] はこれを明示する仕組みとして導入されました。 [SRC[>>11]]
* 構文
[45] [CODE(MIME)@en[[[Content-Disposition:]]]] [[ヘッダー]]の値は、
[[disposition型]]と、零個以上の[[引数]]です。ただし各[[引数]]の前には
[CODE(MIME)[[[;]]]] が必要です。 [SRC[>>11]]
[36] [[disposition型]]は、[[字句]]です。[[大文字・小文字不区別]]です [SRC[>>11]]。
[FIG(railroad)[
= [[字句]]
= *
== [CODE(MIME)[[[;]]]]
== [[引数]]
]FIG]
;; [37] [[字句]]の構文は、 [[MIME]] と [[HTTP]] で異なっています。
([[字句]]参照。)
[40] [[電子メール]]においては [CODE(MIME)[[[;]]]] の前後には[[空白]] ([[RFC 822]] でいう
[CODE(ABNF)[[[linear-white-space]] / [[comment]]]]、 [[RFC 2822]]/[[RFC 5322]]
でいう [CODE(ABNF)@en[[[CFWS]]]]) が挿入できると解釈されています。ただし [[MIME]]
[[RFC]] ではこれは明示されていません。
[46] [[引数]]は [[RFC 2045]] と [[RFC 2183]] の定義が参照されています [SRC[>>11]]。
ただし [[RFC 2183]] は後に改訂されて [[RFC 2231]] となっています。
;; [[引数 (MIME)]] を参照。[[非ASCII文字]]を使った[[ファイル名]]の[[符号化]]については、
[CODE(MIME)@en[[[filename]]]] も参照。
[86] [[HTTP]] [[送信者]]は、[[非妥当]]な [CODE(HTTP)@en[[[Content-Disposition:]]]]
[[ヘッダー]]を[[生成]]しては[['''なりません''']] [SRC[>>85]]。
* 文脈
[20] [CODE(MIME)@en[[[Content-Disposition:]]]] は[[任意選択]]の[[ヘッダー]]です [SRC[>>11]]。
[60] この[[ヘッダー]]は [[MIMEヘッダー]]であり、 [[MIME実体]]で指定できます。
[66] また[[電子メール]] ([[RFC 822]]) [[メッセージ]]の[[ヘッダー]]としても使用できます
[SRC[>>11]]。
[EG[
[73] [[電子メール]]の[[ヘッダー]]で [CODE(MIME)@en[[[Content-Disposition: attachment]]]]
が指定されている場合、その[[メール]]は全体が[[添付ファイル]]のみを含むとみなされるようです。
;; [74] そのように扱われるとは [[RFC 2183]] には明記されていませんが、
それ以外に解釈しようがありません。
]EG]
* 処理モデル
[87] [[HTTP]] [[受信者]]は、[[ヘッダー]]が[[非妥当]]な時に[[回復]]しようとしても構いません。
([[妥当性検証器]]などでそれが望ましい動作である場合を除き) メッセージ全体を拒絶する[['''べきではありません''']]。
[[既定]]の動作は、無視です。
[SRC[>>85]]
;; [88] [[MUA]] が[[非妥当]]な値をどう処理するべきなのかは不明です。
[30] [[MUA]] は、 [CODE(MIME)@en[[[Content-Disposition:]]]] [[ヘッダー]]が無い場合、
適当な方法で表示して構いません [SRC[>>11]]。
* Disposition 型
[43] [DFN[[[disposition型]]]]は、 [CODE(MIME)@en[[[Content-Disposition:]]]]
[[ヘッダー]]の最初に指定する値です。 [[disposition型]]は当該[[実体]]をどう[[レンダリング]]するべきかを主として表すものです。
[34] disposition 型の種類は少なくよく定義された状態を保つことが不要な複雑化を防ぐために好ましい
[SRC[>>11]] とされています。
[55] それでも用途の拡大によって disposition
型を追加できるよう、拡張可能とされています [SRC[>>11]]。
[[disposition型]]を定義したら、 [[IANA]] に登録する[RUBYB[べき]@en[should]]です [SRC[>>42]]。
[56] [[私用]]のための [CODE(ABNF)@en[[[x-token]]]] も認められています [SRC[>>11, >>42]]。
[17] 認識できない [[disposition型]]は、 [CODE(MIME)@en[[[attachment]]]]
として扱う[RUBYB[べき]@en[should]]です [SRC[>>42]]。
[47] [[disposition型]]には次のものがあります。
[FIG(list short)[
-[CODE(MIME)[[[aib]]]]
-[CODE(MIME)[[[alert]]]]
-[CODE(MIME)[[[ancillary]]]]
-[CODE(MIME)[[[attachment]]]]
-[CODE(MIME)@en[[[by-reference]]]]
-[CODE(MIME)[[[early-session]]]]
-[CODE(MIME)[[[file]]]]
-[CODE(MIME)@en[[[form-data]]]]
-[CODE(MIME)@en[[[icon]]]]
-[CODE(MIME)@en[[[info-package]]]]
-[CODE(MIME)@en[[[inline]]]]
-[CODE(MIME)@en[[[notification]]]]
-[CODE(MIME)@en[[[recipient-list]]]]
-[CODE(MIME)@en[[[recipient-list-history]]]]
-[CODE(MIME)[[[render]]]]
-[CODE(MIME)[[[session]]]]
-[CODE(MIME)[[[signal]]]]
-[CODE(MIME)[[[signed-receipt-protocol]]]]
-[CODE(MIME)[[[signed-receipt-micalg]]]]
]FIG]
[75] [CODE(MIME)@en[[[signed-receipt-protocol]]]] と
[CODE(MIME)@en[[[signed-receipt-micalg]]]] は [[RFC 3335]] を出典として [[IANA]]
に登録されていましたが、 [CODE(822)@en[[[Disposition-Notification-Options:]]]]
[[ヘッダー]]で使われるものとして定義されており、 [CODE(MIME)@en[[[Content-Disposition:]]]]
[[ヘッダー]]で使われるものとして登録されたのは誤りのようです。
;; [76] [[RFC 3335]] 自身にも「IANA registration of the ... content
disposition parameter」という記述があり、混乱しているようです。
[84] これらは2012年6月8日付けの [[IANA登録簿]] (2012年6月2日時点) [SRC[>>77]]
にはまだ含まれていますが、2012年9月18日付け (2013年1月15日時点) [SRC[>>78]]
では削除されています。
[REFS[
- [77] <view-source:http://web.archive.org/web/20120625112720/http://www.iana.org/assignments/mail-cont-disp/mail-cont-disp.xml>
- [78] <view-source:http://web.archive.org/web/20130115035855/http://www.iana.org/assignments/mail-cont-disp/mail-cont-disp.xml>
]REFS]
* 引数
[58] [[引数]]を定義したら、 [[IANA]] に登録する[RUBYB[べき]@en[should]]です [SRC[>>42]]。
[59] [[私用]]のための [CODE(ABNF)@en[[[x-token]]]] も認められているようです [SRC[>>42]]
が、[[disposition型]]とは違って構文上明確にはなっていません。
[16] 認識できない[[引数]]は、無視する[RUBYB[べき]@en[should]]です [SRC[>>42]]。
[49] 次の[[引数]]があります。
[FIG(list short)[
-[CODE(MIME)[[[alternates]]]]
-[CODE(MIME)[[[creation-date]]]]
-[CODE(MIME)[[[device]]]]
-[CODE(MIME)[[[filename]]]]
-[CODE(MIME)[[[handling]]]]
-[CODE(MIME)[[[modification-date]]]]
-[CODE(MIME)[[[name]]]]
-[CODE(MIME)[[[read-date]]]]
-[CODE(MIME)[[[size]]]]
-[CODE(MIME)[[[voice]]]]
]FIG]
[8] [[RFC 2183]] で調子に乗って色々定義しましたが、 [[MIME]] では
[CODE(MIME)[filename]] 引数以外ほとんど使われていません。
[39] 構造的に似た [CODE(MIME)[[[Content-Type:]]]] [[ヘッダー]]とは異なり、
[CODE(MIME)@en[[[Content-Disposition:]]]] [[ヘッダー]]の[[引数]]は (特に規定がない限り)
任意の [[disposition型]]に適用できます [SRC[>>42]]。
[EG[
[27] 例えば [CODE(MIME)@en[[[filename]]]] [[引数]]は [CODE(MIME)@en[[[attachment]]]]
でも [CODE(MIME)@en[[[inline]]]] でも使えます [SRC[>>42]]。
]EG]
* 歴史
[4] [ABBR[MIME] [多目的インターネット・メイル拡張]]
([[電子メイル]]) 系の仕様書:
= [1] [[RFC 1806]]
-- <urn:ietf:rfc:1806>
-- [[実験的]]プロトコルとして提案されましたが、
RFC 2183 によって[[廃止]]されました。
= [2] [[RFC 2183]]
-- <urn:ietf:rfc:2183>
-- RFC 1808 の改訂版で、[[提案標準]]になりました。
= [3] [[RFC 2184]]
-- <urn:ietf:rfc:2184>
-- 引数の構文に関する[[更新]]規格です。
-- 提案標準でしたが、 RFC 2231 により廃止されました。
= [51] [[RFC 2231]]
-- <urn:ietf:rfc:2231>
-- RFC 2184 の改訂版で、引数の構文に関する RFC 2183
の更新規格です。 RFC 2184 と同じく提案標準です。
[48] [ABBR[HTTP] [ハイパーテキスト転送プロトコル]] 系の仕様書:
= [18] [ABBR[[[I-D]]] [インターネット原案]]
[[draft-faerber-http-content-disp-00]]
[CITE[Use of the Content-Disposition header with HTTP]]
-- <urn:ietf:id:draft-faerber-http-content-disp-00>
-- <http://ftp.ics.uci.edu/pub/ietf/http/draft-faerber-http-content-disp-00.txt>
-- [[RFC 2068]]・RFC 2616 を更新することを意図していましたが、
結局 RFC 化されませんでした。
-- RFC 2183 相当の内容です。 RFC 2184 には触れていません。
= [53] [[RFC 2616]] ([[HTTP/1.1]])
-- <urn:ietf:rfc:2616>
-- [CITE[19.5.1 Content-Disposition]]
-- RFC 自体は[[原案標準]]ですが、 [CODE(HTTP)[Content-Disposition]]
の部分は参考です。
-- 制定時期にもかかわらず、 RFC 1806 相当の内容です。
[ABBR[HTTP] [ハイパーテキスト転送プロトコル]] では特に
[CODE(MIME)[[[filename]]]] 引数がよく使われているにもかかわらず、
標準化は中途半端な状況です。
[38] [ABBR[SIP] [セッション初期化プロトコル]] 系の仕様書:
= [[RFC 3261]]
-- [CITE[20.11 Content-Disposition]]
-- 提案標準です。
-- 前版の [[RFC 2543]] では定義されていませんでしたが、
この版で RFC 2183 を基に規定され、積極的に用いられています。
なお、 RFC 2231 は参照していません。
= [[RFC 3968]]
-- [ABBR[SIP] [セッション初期化プロトコル]]
頭欄で使われる引数の登録簿を規定して、初期状態として
[CODE(SIP)[Content-Disposition]] には [CODE(SIP)[handling]]
が登録されています。
[FIG(quote)[
[FIGCAPTION[
[6] RFC 2616 (HTTP/1.1) 19.5.1 Content-Disposition
]FIGCAPTION]
[5]
> The Content-Disposition response-header field has been proposed as a
means for the origin server to suggest a default filename if the user
requests that the content is saved to a file. This usage is derived
from the definition of Content-Disposition in RFC 1806 [35].
[CODE(HTTP)[Content-Disposition]] [[応答頭欄]]は、
[[利用者]]が[[内容]]を[[ファイル]]に保存する場合の既定の[[ファイル名]]を[[起源鯖]]が提案するための手段として提案されています。
この使用は [[RFC1806]] の [CODE(MIME)[Content-Disposition]]
の定義から派生しています。
>
- content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )
- disposition-type = "attachment" | disp-extension-token
- disposition-parm = filename-parm | disp-extension-parm
- filename-parm = "filename" "=" quoted-string
- disp-extension-token = token
- disp-extension-parm = token "=" ( token | quoted-string )
> An example is
- Content-Disposition: attachment; filename="fname.ext"
> The receiving user agent SHOULD NOT respect any directory path
information present in the filename-parm parameter, which is the only
parameter believed to apply to HTTP implementations at this time. The
filename SHOULD be treated as a terminal component only.
現時点では [CODE(ABNF)[filename-parm]] 引数だけが HTTP
実装に適用されると信じられていますが、
受信した[[利用者エージェント]]は、 [CODE(ABNF)[filename-parm]]
引数に示されたいかなる[[ディレクトリ]][[経路]]情報も尊重する'''べきではありません'''。
ファイル名は最終部品のみとして扱う'''べきです'''。
> If this header is used in a response with the application/octet-stream content-type, the implied suggestion is that the user agent
should not display the response, but directly enter a `save response
as...' dialog.
この頭が[[応答]]で [CODE(MIME)[[[application/octet-stream]]]]
[[内容型]]と共に使われている場合は、利用者エージェントは応答を表示するべきではなく、
「応答を保存・・・」対話に直接入るべきであることを暗に提案しています。
> See section 15.5 for Content-Disposition security issues.
]FIG]
[FIG(quote)[
[FIGCAPTION[
[9] RFC 2616 (HTTP/1.1) 15.5 Content-Disposition Issues
]FIGCAPTION]
> RFC 1806 [35], from which the often implemented Content-Disposition
(see section 19.5.1) header in HTTP is derived, has a number of very
serious security considerations. Content-Disposition is not part of
the HTTP standard, but since it is widely implemented, we are
documenting its use and risks for implementors. See RFC 2183 [49]
(which updates RFC 1806) for details.
[[HTTP]] でしばしば実装される [CODE(HTTP)[Content-Disposition]]
頭は [[RFC 1806]] から派生したものですが、 RFC 1806
には多くの非常に深刻な安全上の問題があります。 [CODE(HTTP)[Content-Disposition]]
は HTTP 規格の一部ではありませんが、広く実装されていることから、
その使用と危険を実装者のために文章化しています。
詳しくは (RFC 1806 を更新する) [[RFC 2183]] をご覧下さい。
]FIG]
[10] [[RFC 2616]] の改訂である [[RFC 7231]] は、 [[RFC 6266]] で規定されているとして
[CODE(HTTP)@en[[[Content-Disposition:]]]] [[ヘッダー]]の規定を削除しています。
;; [24] [[RFC 2231]] / [[RFC 5987]] の拡張構文と [CODE(MIME)@en[[[filename]]]]
[[引数]]における[[非ASCII文字]]の[[ファイル名]]の指定については、
[CODE(MIME)@en[[[filename]]]] [[引数]]の項を参照。
* 特定の MIME 型での意味と処理モデル
** [CODE(MIME)@en[multipart/[VAR[*]]]]
;; [28] [CODE(MIME)@en[[[multipart/[VAR[*]]]]]] を参照。
** [CODE(MIME)@en[multipart/form-data]]
[65] [CODE(MIME)@en[[[multipart/form-data]]]] の項をご覧ください。
** [CODE(MIME)@en[multipart/related]]
[68] [CODE(MIME)@en[[[multipart/related]]]] では値は無視されます。[[引数]]は無視されません。
詳しくは [CODE(MIME)@en[[[multipart/related]]]] の項をご覧ください。
* 実装
- [22] 現実の実装では [[Content-Type:]] 欄の値, この [CODE[Content-Disposition:]] 欄の値、それに [[URI]] のファイル名やその他の条件で、 [[WWW]] ブラウザ等はブラウザ内で表示したり保存ダイアログを出したり, どの部分をファイル名に採用するかを決めたり、云々でばらばらで混乱していますね。 (特に [[M$IE]] の場合は、版によっても挙動が変わったり、同じ版でも Windows Registry の設定で不可解に変化したりするそうです。)
- [23] サーバーが UA に保存させるのに、 dispositon 型 [CODE[file]] を指定して、 [SAMP[Content-Disposition: file; filename=foo]] のように指定することがあるようです。 ([[CGI]] script とかで。)
;; [41] [CODE(MIME)@en[[[Content-Disposition: attachment]]]]、
[CODE(MIME)@en[[[filename]]]] も参照。
* 例
[54] 電子メイルに画像を[[行内]]表示で埋込む例:
[PRE(822)[
[CODE(MIME)[[[Content-Type]]]]: [CODE(MIME)[[[multipart/mixed]]]];
[CODE(MIME)[[[boundary]]]]="boundary"
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[text/plain]]]];
[CODE(MIME)[[[charset]]]]=[CODE(charset)[[[ISO-2022-JP]]]]
先日の旅行で撮った写真を送ります。
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[image/png]]]]
[CODE(MIME)[[[Content-Transfer-Encoding]]]]: [CODE(MIME)[[[Base64]]]]
[CODE(MIME)[[[Content-Disposition]]]]: [CODE(MIME)[[[inline]]]]
[VAR[... Base64 で符号化した画像データ ...]]
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[text/plain]]]];
[CODE(MIME)[[[charset]]]]=[CODE(charset)[[[ISO-2022-JP]]]]
どうですか? 素敵なところでしょう?
--boundary--
]PRE]
レンダリング例:
[PRE[
先日の旅行で撮った写真を送ります。
+---------------------------------------+
| |
: (写真) :
| |
+---------------------------------------+
どうですか? 素敵なところでしょう?
]PRE]
[25] 電子メイルに画像を[[添付]]する例:
[PRE(822)[
[CODE(MIME)[[[Content-Type]]]]: [CODE(MIME)[[[multipart/mixed]]]];
[CODE(MIME)[[[boundary]]]]="boundary"
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[text/plain]]]];
[CODE(MIME)[[[charset]]]]=[CODE(charset)[[[ISO-2022-JP]]]]
先日の旅行で撮った写真を送ります。
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[image/png]]]]
[CODE(MIME)[[[Content-Transfer-Encoding]]]]: [CODE(MIME)[[[Base64]]]]
[CODE(MIME)[[[Content-Disposition]]]]: [CODE(MIME)[[[attachment]]]]
[VAR[... Base64 で符号化した画像データ ...]]
--boundary
[CODE(MIME)[Content-Type]]: [CODE(MIME)[[[text/plain]]]];
[CODE(MIME)[[[charset]]]]=[CODE(charset)[[[ISO-2022-JP]]]]
どうですか? 素敵なところでしょう?
--boundary--
]PRE]
レンダリング例:
[PRE[
先日の旅行で撮った写真を送ります。 /+----+
<<< +-+ |
どうですか? 素敵なところでしょう? | 写真 |
+------+
]PRE]
[Q[写真]]の絵にマウス・ポインタを合わせると、
写真が表示されます。 [WEAK[(あくまで実現の一例です。)]]
[26] [[HTML]] の[[フォーム]]の[[提出]]の例:
[PRE(HTML)[
<[CODE(HTMLe)[[[form]]]] [CODE(HTMLa)[[[enctype]]]]="[CODE(MIME)[[[multipart/form-data]]]]">
<[CODE(HTMLe)[[[dl]]]]>
<[CODE(HTMLe)[[[dt]]]]>名前</[CODE(HTMLe)[dt]]>
<[CODE(HTMLe)[[[dd]]]]>
<[CODE(HTMLe)[[[input]]]] [CODE(HTMLa)[[[type]]]]="text"
[CODE(HTMLa)[[[name]]]]="usrname"
[CODE(HTMLa)[[[value]]]]="名無しさん" />
</[CODE(HTMLe)[dd]]>
<[CODE(HTMLe)[[[dt]]]]><[CODE(HTMLe)[input]] [CODE(HTMLa)[type]]="[[submit]]" /></[CODE(HTMLe)[dt]]>
</[CODE(HTMLe)[dl]]>
</[CODE(HTMLe)[form]]>
]PRE]
このフォームから提出すると:
[PRE(MIME)[
[CODE(MIME)[Content-Type]]: [CODE(MIME)[multipart/form-data]];
[CODE(MIME)[boundary]]="boundary"
--boundary
Content-Type: text/plain; charset=[CODE(charset)[ISO-2022-JP]]
Content-Disposition: [[form-data]]; [[name]]="usrname"
名無しさん
--boundary--
]PRE]
[61]
[PRE(HTTP example code)[
Content-Disposition: file; filename=name.suffix
]PRE]
([[HTTP]][[応答]])
;; 出典: [CITE[Lynx Users Guide v2.7.1]] <http://leb.net/blinux/blynx/Lynx_users_guide.html#19>
* 関連
[80] [[ダウンロード]]の動作を制御する[[プロトコル要素]]としては、
[CODE(HTTP)@en[[[X-MS-InvokeApp:]]]], [CODE(HTML)@en[[[DownloadOptions]]]],
[CODE(HTTP)@en[[[X-Download-Options:]]]], [CODE(HTML)@en[<[[a]] [[download]]>]] があります。
* メモ
[19] [CODE[Content-Disposition:]] 欄は、 HTTP でも (特に [[CGI]] script の類で) よく使われるにも拘らず、 HTTP Core 仕様書は簡単に触れるにとどまっています。 >>18 は RFC 2184 及び現実の使用状況・ HTTP の仕様をそれなりに折り合わせたもので、実装の指針としては (期限切れ I-D ながらも) 十分な品質だと思われます。
- [21] >>19 ただし、 >>20 のような問題には触れていませんから、もちろんこの I-D に従って実装すれば良いというものでもありません。
- [29] Referer とか「注目の WikiPage」ランキングみてると、実は [CODE[Content-Disposition]] 欄ってすごい人気ですね。やっぱり「[[HTTP]] で[[ダウンロード]]させる[[ファイル名]]を指定する方法」として有名だからかな?
- [31] >>29 [[とほほ]]とか [[CGI-ML]] とか [[Web相談室]]とかが普及に貢献してますから(w
- [32] それにしても、 HTTP 用のこの欄が標準化されないのはすごく謎。他の MIME 由来欄はちゃんと標準化してるのに。特にファイル名の非 ASCII 文字の問題 ([[encoded-word]] or [[RFC 2231]] or 生) という大問題があるから、 MIME 任せには出来ないと思うんだけど。 (2231 実装している HTTP UA なんてあるんだろうか?)
- [33] [WEAK[2003-08-29 11:41:24 +00:00]] ''[[attachment]]'': >>29 この WikiPage は [[Google]] で日本語11位にランクインしてますから(藁
[57]
<IW:Google:"Content-Disposition"> などで検索してみるとひどい状況。仕様書がひどくて実装もひどけりゃウェブの文書もひどくなるのは至極当然。
そうはいっても、 Google 上位サイトで仕様書を参照しているサイトはどれだけあります? 参照して無くても、読んだことがありそうな人が書いてる文書はどれだけあります? この分野全般について言えることですけど、わかりやすくて正しい解説書・解説サイトがほぼ皆無というのも問題かも。
([[名無しさん]] [WEAK[2005-01-19 08:48:15 +00:00]])
[62]
[CITE@ja[JVN#95019167: Internet Explorer における MHTML によるダウンロードのダイアログボックス回避の脆弱性]] ([CODE[2007-06-21 17:52:08 +09:00]] 版) <http://jvn.jp/jp/JVN%2395019167/index.html>
([[名無しさん]] [WEAK[2007-06-24 07:41:31 +00:00]])
[63]
[CITE@ja[JVN#27203006: Internet Explorer における MHTML により任意のスクリプトが実行される脆弱性]] ([CODE[2007-06-21 17:52:08 +09:00]] 版) <http://jvn.jp/jp/JVN%2327203006/index.html>
([[名無しさん]] [WEAK[2007-06-24 07:42:16 +00:00]])
[64]
[CITE[Test Cases for HTTP Content-Disposition header and RFC 2231/2047 Encoding]] ([TIME[2008-09-21 02:53:50 +09:00]] 版) <http://greenbytes.de/tech/tc2231/>
[67] [CITE@en[RFC 5621 - Message Body Handling in the Session Initiation Protocol (SIP)]]
([TIME[2009-09-12 07:37:40 +09:00]] 版)
<http://tools.ietf.org/html/rfc5621#section-8>
[69] [CITE[Test Cases for HTTP Content-Disposition header field and the Encodings defined in RFC 2047/6266 and RFC 2231/5987]]
( ([TIME[2011-08-03 23:43:34 +09:00]] 版))
<http://greenbytes.de/tech/tc2231/>
[70] [CITE@en[RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)]]
( ([TIME[2012-03-02 10:21:42 +09:00]] 版))
<http://tools.ietf.org/html/rfc6266>
[71] [CITE[Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987]]
( ([TIME[2012-03-06 16:55:36 +09:00]] 版))
<http://greenbytes.de/tech/tc2231/>
[72] [CITE[Content-Disposition FireFoxとIEの挙動の違い - 開発者の談話室]]
( ([TIME[2010-07-29 15:43:38 +09:00]] 版))
<http://www.agile-tech.com/blogs/dev/2007/12/contentdisposition.html>
[79] [CITE@en[RFC 4975 - The Message Session Relay Protocol (MSRP)]]
( ([TIME[2012-02-26 13:20:50 +09:00]] 版))
<http://tools.ietf.org/html/rfc4975#page-38>
[81] [CITE@en[RFC 5438 - Instant Message Disposition Notification (IMDN)]]
( ([TIME[2013-10-06 10:18:10 +09:00]] 版))
<http://tools.ietf.org/html/rfc5438#section-15.4>
[82] [CITE[IE9以降でもHTMLフォームでファイル名とファイルの中身を外部から指定できる | 徳丸浩の日記]]
( ([TIME[2014-01-30 01:06:48 +09:00]] 版))
<http://blog.tokumaru.org/2014/01/ie9html.html>
[83] [CITE@en[RFC 5621 - Message Body Handling in the Session Initiation Protocol (SIP)]]
( ([TIME[2014-06-09 06:12:50 +09:00]] 版))
<http://tools.ietf.org/html/rfc5621#section-8>