/
681.txt
69 lines (48 loc) · 5.24 KB
/
681.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
[28] [[実体]]を ([[媒体型]]や[[文字符号化]]とは別に) [[符号化]]する仕組みとして、
[[HTTP]] には[[内容符号化]]と[[転送符号化]]、[[MIME]] には[[内容転送符号化]]があります。
[29] [DFN[[[内容符号化]]]]は、本来の意味的には転送される[[実体]]の本質的な一部となった[[符号化]]を表します。
例えば、 [[gzip]] [[圧縮]]された[[ファイル]]を転送する場合、[[内容符号化]]が [[gzip]]
であるといえます。一方[DFN[[[転送符号化]]]]は、転送時の都合上の一時的な[[符号化]]を表します。
[[HTTP/1.1]] では[[実体本体]]全体の長さがわからなくても少しずつ転送を繰り返す [[chunked]]
[[符号化]]の仕組みがありますが、こちらは[[転送符号化]]です。ただし、
歴史的理由により本来[[転送符号化]]であるものが[[内容符号化]]によって転送されたり、
[[内容符号化]]であるものが[[転送符号化]]であったかのように扱われたりすることがあります。
[[HTTP]]、[[RTSP]]、[[SIP]] では[[内容符号化]]の識別に [CODE(HTTP)@en[[[Content-Encoding:]]]]
[[頭欄]]、[[転送符号化]]の識別に [CODE(HTTP)@en[[[Transfer-Encoding:]]]] [[頭欄]]を使います。
[[内容折衝]]のために[[内容符号化]]では [CODE(HTTP)@en[[[Accept-Encoding:]]]] [[頭欄]]、
[[転送符号化]]では [CODE(HTTP)@en[[[TE:]]]] [[頭欄]]が用いられます。
[37] [DFN[[[内容転送符号化]]]]は、[[実体]]の転送時の都合上の一時的な[[符号化]]を表します。
その意味で [[HTTP]] の[[転送符号化]]に近い概念です。 [[MIME]]
では[[内容転送符号化]]の識別に [CODE(MIME)@en[[[Content-Transfer-Encoding:]]]]
[[頭欄]]を使います。
* 値
[3] [[内容符号化]]、[[転送符号化]]、[[内容転送符号化]]の名前を表す値はいずれも[[大文字・小文字を区別しない]]とされています。
;; ただし、これらを指定する[[頭欄]]で[[引数]]を指定できる場合、その値まで[[大文字・小文字を区別しない]]とは限らないことに注意してください。
[31] [[内容符号化]]と[[転送符号化]]で使える値の集合は別々ですが、
重なりがあって、実際上も[[内容符号化]]と[[転送符号化]]が混用されています。
[32] また、本来 [[MIME]] の[[内容転送符号化]]であり、 [[HTTP]]
では意味を成さない値も[[内容符号化]]として誤用されていることがあります。
** 私用の値
[4] [[内容符号化]]、[[転送符号化]]、[[内容転送符号化]]のいずれでも、例によって
[CODE@en[[[x-]]]] から始まる値は[[私用]]のために予約されています。
[30] ただし、 [[RFC 1945]] [[HTTP/1.0]] の定義だけは変則的で、
[CODE(HTTP)@en[[[x-gzip]]]] のような [CODE(HTTP)@en[[[x-]]]]
がついた名前の方だけが規定に含まれています。
** 内容符号化の値
[5] [[内容符号化]]を参照。
** 転送符号化の値
[35] [[転送符号化]]を参照してください。
* 転送符号化か内容符号化か
[24] 以前は [[IANAREG]] には[[転送符号化]]として [CODE(HTTP)@en[[[chunked]]]]
しか登録されておらず、 [[RFC 2616]] で [CODE(HTTP)@en[[[Transfer-Encoding:]]]]
欄でも[[転送符号化]]として指定できるよう拡張された ([[RFC 2068]] ではそうなっていなかった)
[CODE(HTTP)@en[[[gzip]]]] などの値はありませんでした。
[36]
もしかすると単なる転送のための圧縮は内容符号化ではなく転送符号化を使うべし、という意思が働いているのかもしれません...
(そうすれば、[[ダウンロード]]した [CODE(file)@en[[VAR[*]].gz]] ファイルが勝手に展開されている、という問題は防げるようになるでしょうし。)
[11] [[mod_gzip]] とか流行ってるわけですが、ほんとは転送上の圧縮は [CODE(HTTP)[Content-Encoding]] じゃなくて [CODE(HTTP)[[[Transfar-Encoding]]]] 使うべきじゃないんですかね。もっとも、主要 [[UA]] で対応しているのは [[Opera]] だけという有様ですが。。。 (一方内容符号化はほとんどの主要 UA で扱えるから。。。)
[15]
ファイルとして保存する時に UA が [CODE(HTTP)[Content-Encoding]] (特に [CODE(HTTP)[gzip]] を展開してしまい、利用者は圧縮したものを受取ったつもりでいて混乱するという問題が多発していまして、
内容折衝するのでもなければ [CODE(HTTP)[Content-Encoding]] は使うべきではないという意見すらありますね。
本当は保存時に展開するかどうかを UA が利用者に尋ねるのが良いのでしょう。
転送のためだけの圧縮も、 >>11 の言うように [CODE(HTTP)[Content-Encoding]] は使わずに [CODE(HTTP)[Transfer-Encoding]] にした方がいいでしょう。 [CODE(HTTP)[Transfer-Encoding]] に [CODE(HTTP)[gzip]] などが追加されたのはこの問題もたぶん考えてのことでしょう [WEAK[(という理由もあったのかどうかは調べてみないと分かりませんが)]]。