[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:]]]] [[頭欄]]が用いられます。 [1] [DFN[[[内容転送符号化]]]]は、[[実体]]の転送時の都合上の一時的な[[符号化]]を表します。 その意味で [[HTTP]] の[[転送符号化]]に近い概念です。 [[MIME]] では[[内容転送符号化]]の識別に [CODE(MIME)@en[[[Content-Transfer-Encoding:]]]] [[頭欄]]を使います。 * 値 [3] [[内容符号化]]、[[転送符号化]]、[[内容転送符号化]]の名前を表す値はいずれも[[大文字・小文字を区別しない]]とされています。 ;; ただし、これらを指定する[[頭欄]]で[[引数]]を指定できる場合、その値まで[[大文字・小文字を区別しない]]とは限らないことに注意してください。 ** 私用の値 [4] [[内容符号化]]、[[転送符号化]]、[[内容転送符号化]]のいずれでも、例によって [CODE@en[[[x-]]]] から始まる値は[[私用]]のために予約されています。 [30] ただし、 [[RFC 1945]] [[HTTP/1.0]] の定義だけは変則的で、 [CODE(HTTP)@en[[[x-gzip]]]] のような [CODE(HTTP)@en[[[x-]]]] がついた名前の方だけが規定に含まれています。 ** 内容符号化と転送符号化の値 [31] [[内容符号化]]と[[転送符号化]]で使える値の集合は別々ですが、 重なりがあって、実際上も[[内容符号化]]と[[転送符号化]]が混用されています。 [32] 本来 [[MIME]] の[[内容転送符号化]]であり、 [[HTTP]] では意味を成さない値も誤用されています。 [5] 内容符号化・転送符号化の名前: ,値 ,内容・対応媒体型 ,典拠 ,"[CODE(HTTP)[[[7bit]]]] {内容} ",MIME 7‐bit ,非標準 ,"[CODE(HTTP)[[[8bit]]]] {内容} ",MIME 8‐bit ,非標準 ,"[CODE(HTTP)[[[base64]]]] {内容} ",[[Base64]] ,非標準 ,"[CODE(HTTP)[[[binary]]]] {内容} ",MIME Binary ,非標準 ,[[bzip]] {内容},bzip >>8 ,非標準 ,[[x-bzip]] {内容},bzip >>8 [[application/x-bzip]] , ,[[bzip2]] {内容},bzip >>8 ,非標準 ,[[x-bzip2]] {内容},bzip >>8, ,[[chunked]] {転送},[[chunked]],[HTTP/1.1] ,"[[compress]] {内容,転送}",[[Un|x]] ファイル圧縮 >>6 >>7 ,[HTTP/1.1] ,"[[x-compress]] {内容}",= [CODE(HTTP)[compress]] >>6 >>7 ,[HTTP/1.0] ,"[[deflate]] {内容,転送}",[[zlib]] [[application/x-deflate]] ,[HTTP/1.1] ,[[x-deflate]] {内容},= [CODE(HTTP)[deflate]] ,非推奨 ,"[[gzip]] {内容,転送}",GNU Zip >>6 [[application/x-gzip]] ,[HTTP/1.1] ,[[x-gzip]] {内容},= [CODE(HTTP)[gzip]] >>6 ,[HTTP/1.0] ,"[CODE(HTTP)[[[x-hqx]]]] {内容}" ,[[BinHex]] , ,"[[identity]] {内容,転送}",無変換 ,[HTTP/1.1] ,[CODE(HTTP)@en[[[pack200-gzip]]]],"[[内容符号化]]","[[JSR]] 仕様, [[IANA]] 登録済","[[JSR 200]], [IANAREG]" ,"[CODE(HTTP)[[[quoted-printable]]]] {内容} ",[[Quoted-Printable]] ,非標準 ,"[CODE(HTTP)[[[text/html]]]] {内容} ",不明 ,非標準 ,"[CODE(HTTP)[[[text/plain]]]] {内容} ",不明 ,非標準 ,[[trailer]] {転送},Trailer 頭欄,[HTTP/1.1] ,[[x-zip]] {内容},= [CODE(HTTP)[compress]] >>7 >>1 ,非推奨 *** IANA 登録簿 [33] [[内容符号化]]と[[転送符号化]]の値は [[IANA登録簿]] で示されています。 [24] IANAREG には転送符号化は [CODE(ABNF)["chunked"]] しか載っていませんが、 [[Transfer-Encoding]>>17] によると "gzip" など [CODE(HTTP)[Content-Encoding]] 欄で使われる値も使えるらしいです。 (この記述は RFC 2616 で追加されたもので RFC 2068 にはありません。) もしかすると単なる転送のための圧縮は内容符号化ではなく転送符号化を使うべし、という意思が働いているのかもしれません... (そうすれば、[[ダウンロード]]した [CODE(file)[[VAR[*]].gz]] ファイルが勝手に展開されている、という問題は防げるようになるでしょうし。) [25] 値 "trailers" は転送符号化ではありませんが、 [CODE(HTTP)[TE:]] 欄では転送符号化に準じて扱われています。 [6] [CODE(HTTP)[x-compress]], [CODE(HTTP)[x-gzip]] は、 [[HTTP/1.1]] が分かる相手には使うべきではありません。 逆に [CODE(HTTP)[compress]], [CODE(HTTP)[gzip]] は、 [[HTTP/1.0]] しか分からない相手に使うべきではありません。 [7] [CODE(HTTP)[compress]] は、特許問題のある [[LZW圧縮法]]を使う (というかほぼそのものな) ので、 使用するべきではありません。 [8] [CODE(HTTP)[bzip]] / [CODE(HTTP)[bzip2]] / [CODE(HTTP)[x-bzip]] は HTTP RFC では規定されていませんが、 使用されていることがあるみたいです。 (3つとも同義みたいです。) [1] [CODE(HTTP)[[[Accept-Encoding:]]]] 欄に [CODE(HTTP)[[[7bit]], [CODE(HTTP)[[[8bit]]]], [CODE(HTTP)[[[binary]]]] とか書く [[UA]] があるらしい。 なんか勘違いしているような気がする。 [2] 古い HTTP/1.0 server/UA は [CODE(HTTP)[x-zip]] という値を [CODE(HTTP)[compress]] の意味で使っていました。 だけど[CODE[古い]]って一体どれだけ太古の昔の話だろう? [26] 多分変てこなロボットだと思うんですが、 なぜか [CODE(HTTP)[Accept-Encoding]] に [CODE(HTTP)[text/html]] とか [CODE(HTTP)[text/plain]] とか送ってくる奴がいます。数でいうと結構出現頻度が高い。 (同じ奴ばっかだと思うけど。) - [27] 今時は HTTP/1.0 の実装でも [CODE(HTTP)[x-gzip]] は知ってるけど [CODE(HTTP)[gzip]] は知らないなんてのは無いみたいです。 [CODE(HTTP)[Accept-Encoding]] も [CODE(HTTP)[gzip]] で送ってくるのがほとんど。 ([CODE(HTTP)[x-gzip]] ''も''送ってくる奴も結構いますが。)