/
636.txt
556 lines (387 loc) · 24.5 KB
/
636.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
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
[131] [DFN[gzip]] は、[[圧縮形式]]の1つです。 [[Unix]] や [[HTTP]] などで広く用いられています。
* 仕様書
[51] [[gzip]] は [DFN[RFC 1952]] により定義されています。
[REFS[
- [19] '''[CITE@en[RFC 1952 - GZIP file format specification version 4.3]] ([TIME[2014-11-02 13:39:48 +09:00]] 版) <https://tools.ietf.org/html/rfc1952>'''
- [141] [CITE[The gzip file format]]
([TIME[2002-07-03 05:38:22 +09:00]])
<http://www.gzip.org/format.txt>
- [8] [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-4.2.3>
- [11] [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-8.5>
- [12] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#page-12>
- [17] [CITE@en[RFC 6968 - FCAST: Object Delivery for the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols]] ([TIME[2014-09-14 18:07:31 +09:00]] 版) <https://tools.ietf.org/html/rfc6968#page-21>
]REFS]
* 構文
[56] [[gzip]] [[ファイル]]は、
メンバーの列で構成されます [SRC[>>19]]。
[123] [[メンバー]]数は特に規定されていません。 0個でも構わないのかは不明です。
[133] [[メンバー]]数が1個以外のものが使われることもあるようですが、
[[相互運用性]]は高くないようです [SRC[>>136]]。
[142] 圧縮データの末尾は検知可能であり
([[gzip]] で用いる圧縮形式はそのようなものでなければならず)、
[[記録]]指向の[[ファイルシステム]]や、
特定ブロック長の倍数でしか読めない[[装置]]由来の場合の圧縮データを扱う[[展開器]]は、
末尾を検知して以後を読み飛ばさなければなりません。
([[gzip]] コマンドにもそのような機能が備わっています。) [SRC[>>141]]
[REFS[
- [136] [CITE[reading multi-member gzip files - Google グループ]] ([TIME[2017-09-25 00:07:06 +09:00]]) <https://groups.google.com/forum/#!topic/golang-nuts/VFfzYiI2rDc>
]REFS]
-*-*-
[57] [DFN[[RUBYB[メンバー]@en[member]]]]は、
[RUBYB[圧縮データ集合]@en[compressed data set]]であり、
次のように構成されます。 [SRC[>>19]]
[FIG(list members)[
: [[ID1]] 1バイト : 常に固定の値です。
: [[ID2]] 1バイト : 常に固定の値です。
: [[CM]] 1バイト : 圧縮方式です。
: [[FLG]] 1バイト : いくつかのフラグです。
: [[MTIME]] 4バイト : 最終修正日時です。
: [[XFL]] 1バイト : 圧縮方式依存のフラグです。
: [[OS]] 1バイト : 元のファイルシステムです。
: [[XLEN]] 2バイト : 余剰欄の長さです。
([VAR[FEXTRA]] の場合のみ。)
: 余剰欄 [VAR[XLEN]] バイト :
([VAR[FEXTRA]] の場合のみ。)
: 元のファイル名 : 元のファイル名です。
([VAR[FNAME]] の場合のみ。)
: ファイルコメント : 人間向けの任意のコメントです。
([VAR[FCOMMENT]] の場合のみ。)
: [[CRC16]] :
([VAR[FHCRC]] の場合のみ。)
: 圧縮されたブロック群 :
: [[CRC32]] 4バイト :
: [[ISIZE]] 4バイト :
]FIG]
[67] [[ID1]] から [[OS]] までを [[gzip]] [RUBYB[ヘッダー]@en[header]] [SRC[>>19]]
と呼びます。
[124] [[展開器]]に与えられたデータが十分な長さがない場合にどう処理するべきかは不明ですが、
エラーとするべきでしょう。
** ID1、ID2
[58] [DFN[[ABBR[ID1][IDentification 1]]]] は [N[31]] ([N[0x1F]])、
[DFN[[ABBR[ID2][IDentification 2]]]] は [N[139]] ([N[0x8B]]) で、
[[gzip]] であることを表します。 [SRC[>>19]]
[113] [[展開器]]は、これらの値が不適切な時、
エラーとしなければなりません。 [SRC[>>19]]
** CM
[59] [DFN[[ABBR[CM][Compression Method]]]] は、
[RUBYB[圧縮方式]@en[compression method]]を表します。 [SRC[>>19]]
[60] [N[0]] - [N[7]] は予約されています。 [SRC[>>19]]
[61] [N[8]] は、 [[DEFLATE]] を表します。 [SRC[>>19]]
[87] [N[9]] - [N[255]] は定義されていません。
[114] [[展開器]]は、この値が不適切な時、
エラーとしなければなりません。 [SRC[>>19]]
** FLG
[62] [DFN[[ABBR[FLG][FLaGs]]]] は、
次の各[[ビット]]で構成されます。 [SRC[>>19]]
- 第0ビット FTEXT
- 第1ビット FHCRC
- 第2ビット FEXTRA
- 第3ビット FNAME
- 第4ビット FCOMMENT
- 第5ビット - 第7ビット 予約
-*-*-
[63] [DFN[FTEXT]] が設定されている場合、
ファイルはおそらく [[ASCII]] テキストであることを表します。 [SRC[>>19]]
[64] [[圧縮器]]は入力データを少量検査して本フラグを設定できますが、
必ず設定しなければならないものではなく、
はっきりしない時は [N[0]] とできます。
[[圧縮器]]は常に [N[0]] としても構いません。 [SRC[>>19]]
[65] [[展開器]]は本フラグを無視して常に[[バイナリーデータ]]として扱っても構いません。
[[ASCII]] テキストと[[バイナリーデータ]]で異なるファイル形式を使うシステムでは、
[[展開器]]は本フラグを見て適切な形式を選択できます。 [SRC[>>19]]
-*-*-
[66] [DFN[FHCRC]] が設定されている場合、
[[CRC16]] が存在することを表します。 [SRC[>>19]]
;; [68] 本フラグは、 [[gzip]] 1.2.4 で異なる意味で[[文書化]]されていましたが、
1.2.4 までの [[gzip]] では設定されることはありませんでした。 [SRC[>>19]]
[109] [[圧縮器]]は、これを [N[0]] として構いません。 [SRC[>>19]]
-*-*-
[69] [DFN[FEXTRA]] が設定されている場合、
余剰欄が存在することを表します。 [SRC[>>19]]
[70] [DFN[FNAME]] が設定されている場合、
元のファイル名が存在することを表します。 [SRC[>>19]]
[77] [DFN[FCOMMENT]] が設定されている場合、
コメントが存在することを表します。 [SRC[>>19]]
[110] [[圧縮器]]は、これらをすべて [N[0]] として構いません。 [SRC[>>19]]
-*-*-
[78] 予約ビットは、 [N[0]] でなければなりません。 [SRC[>>19]]
[120] [[展開器]]は、 [N[0]] でないときエラーとしなければなりません。 [SRC[>>19]]
** MTIME
[83] [DFN[[ABBR[MTIME][Modification TIME]]]] は、
元のファイルが最も直近で修正された時刻を表します。 [SRC[>>19]]
[85] 圧縮されたデータが[[ファイル]]由来でない場合は、
[[圧縮]]が開始された[[時刻]]とします。 [SRC[>>19]]
[84] [[時刻]]は、 [[Unix time]] の[[秒]]数です。 [SRC[>>19]]
;; [[2038年問題]]も参照。
[86] [N[0]] は、[[タイムスタンプ]]が利用できないことを表します。
[[圧縮器]]は [N[0]] に設定して構いません。 [SRC[>>19]]
[90] 値は4バイトの[[符号無し整数]]であり、[[小エンディアン]]となります。
** XFL
[91] [DFN[[ABBR[XFL][eXtra FLags]]]] は、
[[CM]] 依存のフラグ群で、1バイトあります [SRC[>>19]]。
[92] [[CM]] が [N[8]] の時、次のフラグがあります [SRC[>>19]]。
- [[XFL]] = [N[2]] は、[[圧縮器]]が最大圧縮の最遅のアルゴリズムを使ったことを表します。
- [[XFL]] = [N[4]] は、[[圧縮器]]が最速アルゴリズムを使ったことを表します。
[93] その他の値は定義されていません。
[111] [[圧縮器]]は、これを [N[0]] として構いません。 [SRC[>>19]]
値 [N[0]] は特に指定がないことを表すと思われます。
;; [125] [[zlib]] には [[FLEVEL]] があり似た意味で使われていますが、値は異なります。
** OS
[94] [DFN[[ABBR[OS][Operating System]]]] は、
圧縮した[[ファイルシステム]]種別を表す1バイトの値です。 [SRC[>>19]]
[95] テキストファイルの[[改行]]の決定に便利かもしれません。 [SRC[>>19]]
[96] 次の値が定義されています。
- [N[0]] - [[FAT]] [SRC[>>19, >>141]], [[VFAT]] [SRC[>>141]], [[NTFS]] [SRC[>>141]]
- [N[1]] - [[Amiga]] [SRC[>>19, >>141]]
- [N[2]] - [[VMS]] [SRC[>>19, >>141]]
- [N[3]] - [[Unix]] [SRC[>>19, >>141]]
- [N[4]] - [[VM/CMS]] [SRC[>>19, >>141]]
- [N[5]] - [[Atari]] [SRC[>>19, >>141]]
- [N[6]] - [[HPFS]] [SRC[>>19, >>141]]
- [N[7]] - [[Macintosh]] [SRC[>>19, >>141]]
- [N[8]] - [[Z-System]] [SRC[>>19, >>141]]
- [N[9]] - [[CP/M]] [SRC[>>19, >>141]]
- [N[10]] - [[TOPS-20]] [SRC[>>19, >>141]]
- [N[11]] - [[NTFS]] [SRC[>>19, >>141]]
- [N[12]] - [[QDOS]] [SRC[>>19, >>141]]
- [N[13]] - [[Acorn RISC OS]] [SRC[>>19, >>141]]
- [N[14]] - [[VFAT]] [SRC[>>141]]
- [N[15]] - [[MVS]] [SRC[>>141]] ([[PRIMOS]] にも使われる [SRC[>>141]])
- [N[16]] - [[BeOS]] [SRC[>>141]]
- [N[17]] - [[Tandem/NSK]]
- [N[18]] - [[THEOS]]
- [N[255]] - 未知 [SRC[>>19]]
[112] [[圧縮器]]は、これを常に [N[255]] として構いません。 [SRC[>>19]]
[119] [[展開器]]は、これを無視しても構いません。 [SRC[>>19]]
** XLEN と余剰欄
[102] [[FEXTRA]] が設定されている場合、
[[XLEN]] と[[余剰欄]]が存在します。
[97] [DFN[[ABBR[XLEN][eXtra LENgth]]]] は、余剰欄の長さを表します。 [SRC[>>19]]
[117] [[展開器]]は、最低でも [[XLEN]]
[[余剰欄]]を読み飛ばさなければなりません。 [SRC[>>19]]
[103] [DFN[[RUBYB[余剰欄]@en[extra field]]]]は、
次の[RUBYB[部分欄]@en[subfield]]の列で構成されます。 [SRC[>>19]]
[FIG(list members)[
: [[SI1]] 1バイト : 部分欄IDの一部です。
: [[SI2]] 1バイト : 部分欄IDの一部です。
: [[LEN]] 2バイト : 部分欄データの長さを表します。
: 部分欄データ [VAR[LEN]] バイト : 部分欄の値です。
]FIG]
-*-*-
[104] [DFN[SI1]] と [DFN[SI2]] の組で[RUBYB[部分欄]@en[subfield]]IDを表します。 [SRC[>>19]]
[105] 通常は2つの [[ASCII文字]]が割り当てられます。
割当は [[Jean-Loup Gailly]] <gzip@prep.ai.mit.edu> が管理しています。 [SRC[>>19]]
追加要求は <support@gzip.org> に送信することになっています [SRC[>>141]]。
[143] ([N[0x41]], [N[0x43]]) = [CODE[AC]]
は、 [[Acorn]] RISC OS/BBC MOS [RUBYB[ファイル型情報]@en[file type information]]
を表します (Kevin Bracey)。 [SRC[>>141]]
[107] ([N[0x41]], [N[0x70]]) = [CODE[Ap]]
は、 [[Apollo]] [RUBYB[ファイル型情報]@en[file type information]] を表します。 [SRC[>>19]]
([[David Sundstrom]]) [SRC[>>141]]
[140] ([N[66]], [N[67]]) = [CODE[BC]] は、
[[BGZF]] が使っています [SRC[>>138]]。
[144] ([N[0x63]], [N[0x70]]) = [CODE[cp]] は、
[[cpio]] で圧縮した[[ファイル]]を表します
([[Geoffrey Dairiki]])。 [SRC[>>141]]
[145] ([N[0x1D]], [N[0x53]]) = [CODE[gs]] ([[ママ]]) は、
[[gzsig]] <http://www.monkey.org/~dugsong/gzsig-0.1.tar.gz>
([[Dug Song]]) で使っています。 [SRC[>>141]]
[146] ([N[0x4B]], [N[0x4E]]) = [CODE[KN]] は、
KeyNote assertion ([[RFC 2704]]) <http://www.cis.upenn.edu/~keynote/>
([[Dug Song]]) で使っています。 [SRC[>>141]]
[147] ([N[0x4D]], [N[0x63]]) = [CODE[Mc]] は、
[[Macintosh]] 情報 (Type および Creator) を表します
([[Cary Scofield]])。 [SRC[>>141]]
[148] ([N[0x52]], [N[0x4F]]) = [CODE[RO]] は、
[[Acorn]] Risc OS [RUBYB[ファイル型情報]@en[file type information]]を表します
([[Adam Goodfellow]])。 [SRC[>>141]]
[106] [[SI2]] = [N[0]] の ID は、将来用に予約されています。 [SRC[>>19]]
[REFS[
- [137] [CITE@en[samtools/hts-specs: Specifications of SAM/BAM and related high-throughput sequencing file formats]] ([TIME[2017-09-25 00:12:17 +09:00]]) <https://github.com/samtools/hts-specs>
-- [138] [CITE[Sequence Alignment/Map Format Specification]] ([TIME[2017-08-31 02:41:46 +09:00]]) <https://samtools.github.io/hts-specs/SAMv1.pdf#page=11>
]REFS]
-*-*-
[108] [[LEN]] は、
[RUBYB[部分欄データ]@en[subfield data]]の長さを表します。
([[SI1]]、[[SI2]]、[[LEN]] は含みません。) [SRC[>>19]]
** 元のファイル名
[71] [DFN[[RUBYB[元のファイル名]@en[original file name]]]]は、
[[FNAME]] が設定されているときに存在します [SRC[>>19]]。
[74] [[元のファイル名]]は、圧縮された[[ファイル]]の元の名前であり、
[[ディレクトリ名]]は含みません。 [SRC[>>19]]
[75] 圧縮された[[ファイル]]が[[大文字・小文字不区別]]な[[ファイルシステム]]上にある場合、
[[小文字]]とします。 [SRC[>>19]]
[73] [[元のファイル名]]は、
[[ISO 8859-1]] [[文字]]で構成されなければなりません。 [SRC[>>19]]
[72] [[元のファイル名]]は、
[N[0x00]] の[[バイト]]で終端します。 [SRC[>>19]]
[76] 名前のある[[ファイル]]以外を圧縮した時は、元のファイル名はありません。 [SRC[>>19]]
[126] [[空文字列]]とすることも特に禁止はされていません。意味があるのかどうかは謎ですが。
[127] 利用できる[[ファイル名]]や長さに制約はありません。
古い [[gzip]] はあまりに長い[[ファイル名]]でクラッシュする不具合がありました [SRC[>>132]]。
実装時には長い[[ファイル名]]により[[セキュリティー]]上の問題とならないように注意が必要です。
[115] [[展開器]]は、最低でも [[FNAME]]
を検査して[[元のファイル名]]を読み飛ばさなければなりません。 [SRC[>>19]]
[128] [[展開器]]は、[[セキュリティー]]のため、[[元のファイル名]]を無防備に信用してはいけません。
** コメント
[79] [RUBYB[コメント]@en[comment]]は、
[[FCOMMENT]] が設定されているときに存在します [SRC[>>19]]。
[80] このコメントは、[[人間]]向けのものです [SRC[>>19]]。
[81] コメントは [[ISO 8859-1]] [[文字]]で構成されます。
[[改行]]は、1つの [[0x0A]] で表すべきです。 [SRC[>>19]]
[82] コメントは、
[N[0x00]] の[[バイト]]で終端します。 [SRC[>>19]]
[129] [[空文字列]]とすることも特に禁止はされていません。
[134] 実装時には長いコメントで[[セキュリティー]]上の問題とならないように注意が必要です。
[116] [[展開器]]は、最低でも [[FCOMMENT]]
を検査して[[元のファイル名]]を読み飛ばさなければなりません。 [SRC[>>19]]
** CRC16
[100] [DFN[[[CRC16]]]] は、
[[FHCRC]] が設定されているときに存在します。 [SRC[>>19]]
[101] [[gzip]] ヘッダーの [[CRC16]] です。 [SRC[>>19]]
[118] [[展開器]]は、最低でも [[FHCRC]]
を検査して[[CRC16]]を読み飛ばさなければなりません。 [SRC[>>19]]
[[CRC16]] を検査することは義務付けられていないようです。
** CRC32
[98] [DFN[[ABBR[CRC32][CRC-32]]]] は、
未圧縮データの [[CRC-32]] 値です。 [SRC[>>19]]
[121] [[gzip]] を使うシステムは、
[[CRC-32]] を検査する手段を提供するべき [SRC[>>19]] とされていますが、
[[展開器]]が [[CRC32]] を検査することは義務付けられていないようです。
** ISIZE
[99] [DFN[[ABBR[ISIZE][Input SIZE]]]] は、
未圧縮データのサイズ [[mod]] 2[SUP[32]] です。 [SRC[>>19]]
[122] [[展開器]]がこの値を使うことは義務付けられていないようです。
* 符号化 (圧縮)
[53] [[圧縮器]]は、 [[RFC 1952]] の要件をすべて満たす[[ファイル]]を生成しなければなりません
[SRC[>>19]]。
* 復号 (展開)
[54] [[展開器]]は、適合する[[ファイル]]をすべて[[受理]]し、
[[展開]]できなければなりません。 [SRC[>>19]]
* MIME 型
[REFS[
- [6] [CITE@en[RFC 6713 - The \x27application/zlib\x27 and \x27application/gzip\x27 Media Types]] ([TIME[2012-08-21 12:20:47 +09:00]] 版) <http://tools.ietf.org/html/rfc6713>
]REFS]
- [CODE(MIME)@en[[[application/zlib]]]]
- [CODE(MIME)@en[[[application/gzip]]]]
- [CODE(MIME)@en[[[application/gzip-compressed]]]]
- [CODE(MIME)@en[[[application/gzipped]]]]
- [CODE(MIME)@en[[[application/x-gunzip]]]]
- [CODE(MIME)@en[application/x-gzip]]
- [CODE(MIME)@en[[[application/x-gzip-compressed]]]]
- [CODE(MIME)@en[[[gzip/document]]]]
* 内容符号化・転送符号化 [CODE(HTTP)@en[gzip]]
[7] [[HTTP]] の[[内容符号化]]と[[転送符号化]] [DFN[[CODE(HTTP)@en[[[gzip]]]]]]
は、 [[gzip]] [[ファイル圧縮]]プログラムが生成する [[LZ77]]
[[符号化]]と32ビット [[CRC]] による[[符号化]] [SRC[[[RFC 1952]]]]
を表します [SRC[>>8, >>11, >>12]]。
** 名前
[9] [[内容符号化]]と[[転送符号化]]の名前は [CODE(HTTP)@en[[[gzip]]]] です [SRC[>>8, >>11]]。
[10] [[受信者]]は [DFN[[CODE(HTTP)@en[[[x-gzip]]]]]] も等価として扱う[['''べきです''']]
[SRC[>>8, >>11]]。
** 処理
[18] [[FCAST]] の実装は、 [CODE(HTTP)@en[[[Content-Encoding:]] [[gzip]]]]
に対応しなければ[['''なりません''']] [SRC[>>17]]。
* 実装
[2] [[Perlでのgzipの圧縮・展開]]
[1] [[WinIE]] の gzip 展開処理ってすごく遅くないですか?
* HTTP での実例
[28] [CODE(HTTP)@en[Content-Type:]] が [CODE(MIME)@en[application/x-gzip]]
で、 [CODE(HTTP)@en[Content-Encoding:]] が無しのもの:
[FIG(list)[
- [24] [CITE[Index of /archives]] ([TIME[2016-05-05 23:39:14 +09:00]]) <http://www.ring.gr.jp/archives/>、[CODE[.gz]] や [CODE[.tgz]]
- [26] [[GitHub]] の [CODE[.tar.gz]] ファイルのダウンロード
[TIME[2016-05-05T14:42:39.00Z]]
- [27] [[SourceForge]] の [CODE[.gz]] [TIME[2016-05-05T14:58:43.100Z]]
- [29] [[ViewVC]] の [CODE[.tar.gz]] を生成してダウンロード [TIME[2016-05-05T14:58:44.400Z]]
- [30] [[search.cpan.org]] [TIME[2016-05-05T15:01:09.700Z]]
- [33] [CITE[cURL: tar.gz from Mirrors]] ([TIME[2016-05-06 00:08:38 +09:00]]) <https://curl.haxx.se/latest.cgi?curl=tar.gz> の[[ミラーサイト]]4つのうち3つ
- [35] [CITE@en[OpenSSL]] ([[OpenSSL Foundation, Inc.]]著, [TIME[2016-05-06 00:09:56 +09:00]]) <https://www.openssl.org/source/>
- [36] [CITE@en[DBMail: Download]] ([TIME[2016-05-06 00:12:55 +09:00]]) <http://www.dbmail.org/index.php?page=download>
- [43] [CITE[Index of /pub/linux/kernel/v3.x]] ([TIME[2016-05-06 00:26:44 +09:00]]) <https://www.kernel.org/pub/linux/kernel/v3.x/>
- [44] [CITE[EPIwm Download]] ([TIME[2016-05-06 00:30:00 +09:00]]) <http://www.nongnu.org/epiwm/download.html>
[[IIS]]
- [46] [CITE@en[CRAN Packages By Name]] ([TIME[2016-05-05 23:05:08 +09:00]]) <https://cran.r-project.org/web/packages/available_packages_by_name.html>
- [50] [CITE@en-US[Downloads – old software | The Arda Network]] ([TIME[2016-05-06 00:41:41 +09:00]]) <http://www.arda.homeunix.net/downloads-old-software/>
[CODE(HTTP)@en[[[Content-Transfer-Encoding:]] [[binary]]]] もあり
]FIG]
[32] [CODE(HTTP)@en[Content-Type:]] が [CODE(MIME)@en[application/octet-stream]]
で [CODE(HTTP)@en[Content-Encoding:]] は無しのもの:
[FIG(list)[
- [25] [[SourceForge]] の [CODE[.tgz]]
[TIME[2016-05-05T14:53:08.800Z]]
- [31] [CITE[Index of /download/]] ([TIME[2016-05-06 00:04:45 +09:00]]) <http://nginx.org/download/>
- [34] [CITE[cURL: tar.gz from Mirrors]] ([TIME[2016-05-06 00:08:38 +09:00]]) <https://curl.haxx.se/latest.cgi?curl=tar.gz> の[[ミラーサイト]]4つのうち1つ
- [45] [CITE@en[PyPI - the Python Package Index : Python Package Index]] ([TIME[2016-05-06 00:31:58 +09:00]]) <https://pypi.python.org/pypi>
- [49] [CITE[The Tengine Web Server]] ([TIME[2016-05-04 22:49:39 +09:00]]) <http://tengine.taobao.org/download.html>
]FIG]
[41] [CODE(HTTP)@en[Content-Type:]] が [CODE(MIME)@en[application/binary]]
で [CODE(HTTP)@en[Content-Encoding:]] は無しのもの:
[FIG(list)[
- [40] [CITE[Index of /libsodium/releases/]] ([TIME[2016-05-06 00:20:42 +09:00]]) <https://download.libsodium.org/libsodium/releases/>
]FIG]
[48] [CODE(HTTP)@en[Content-Type:]] が [CODE(MIME)@en[binary/octet-stream]]
で [CODE(HTTP)@en[Content-Encoding:]] は無しのもの:
[FIG(list)[
- [47] [CITE@en[Downloads - Snort.Org]] ([TIME[2016-05-06 00:38:07 +09:00]]) <https://www.snort.org/downloads>
]FIG]
[37] [CODE(HTTP)@en[Content-Type:]] が展開後のファイル形式で、
[CODE(HTTP)@en[Content-Encoding:]] が [CODE[gzip]] のもの:
[FIG(list)[
- [38] [CITE@en[Index of /rrdtool/pub]] ([TIME[2016-05-06 00:15:48 +09:00]]) <http://oss.oetiker.ch/rrdtool/pub/>
]FIG]
;; [39] [[ダウンロード]]すると、 [[Chrome]] は展開したものを保存し、
[[Firefox]] は圧縮されたものを保存するようです。
[TIME[2016-05-05T15:18:52.000Z]]
[22] [CITE[Directory Listing: /]] ([TIME[2016-05-05 23:31:43 +09:00]]) <http://ftp.mozilla.org/>
[23] >>22 [[gzip]] ファイルに [CODE(HTTP)@en[Content-Encoding:]] はありませんが、
[CODE(HTTP)@en[Content-Type:]] は展開後のファイル形式を表している、
という変な状態になっています。 [TIME[2016-05-05T14:33:27.300Z]]
* 歴史
[55] [[gzip]] の[[仕様書]]の
4.1 版、
4.2 版、
4.3 版に技術的な違いはありません。 4.3 が [[RFC 1952]] です。 [SRC[>>19]]
** 実現値操作 [CODE(HTTP)@en[gzip]]
[14] [[実現値操作]] [DFN[[CODE(HTTP)@en[[[gzip]]]]]] は、
[[内容符号化]] [CODE(HTTP)@en[[[gzip]]]] と同じです [SRC[>>13]]。
[16] [CODE(HTTP)@en[[[gdiff]]]] や [CODE(HTTP)@en[[[diffe]]]] は[[圧縮]]によって大きくサイズを削減できますから、
[CODE(HTTP)@en[[[gzip]]]] も実装することが[RUBYB[強く推奨]@en[strongly recommended]]されています [SRC[>>15]]。
[REFS[
- [13] [CITE@en[RFC 3229 - Delta encoding in HTTP]] ([TIME[2014-10-26 21:15:25 +09:00]] 版) <http://tools.ietf.org/html/rfc3229#section-10.1>
- [15] [CITE@en[RFC 3229 - Delta encoding in HTTP]] ([TIME[2014-10-26 21:15:25 +09:00]] 版) <http://tools.ietf.org/html/rfc3229#section-10.9>
]REFS]
[89] [[IANA登録簿]]には [[RFC 2616]] を出典として登録されています [SRC[>>88]]。
[[RFC 723x]] 出版後も出典は更新されていません。 [TIME[2014-11-19T16:22:24.500Z]]
[REFS[
- [88] [CITE[Instance Manipulation Values]] ([TIME[2014-01-31 02:45:13 +09:00]] 版) <http://www.iana.org/assignments/inst-man-values/inst-man-values.xhtml>
]REFS]
* メモ
[52] 圧縮データへの[[ランダムアクセス]]は設計上想定外とされています [SRC[>>19]]。
[132] [CITE[The gzip home page]] ([TIME[2003-07-27 17:17:23 +09:00]]) <http://www.gzip.org/>
[3][CITE@en[gzip - Wikipedia, the free encyclopedia]] ([TIME[2008-11-12 13:59:37 +09:00]] 版) <http://en.wikipedia.org/wiki/Gzip>
[4]
>>3
>Many server implementations, however, incorrectly implement the protocol by using the raw [[DEFLATE]] stream format ([[RFC 1951]]) instead. The bug is sufficiently pervasive that most modern browsers will accept both [[RFC 1951]] and [[RFC 1950]]-formatted data for the “[[deflate]]” compressed method.
[5] [CITE[gzip - Wikipedia, the free encyclopedia]] (Referenced: [TIME[2009-07-17T21:25:15+09:00]])
<http://en.wikipedia.org/wiki/Gzip>
[20] [CITE@en[RFC 6713 - The 'application/zlib' and 'application/gzip' Media Types]]
([TIME[2015-09-27 13:20:11 +09:00]] 版)
<https://tools.ietf.org/html/rfc6713>
[21] [CITE@ja[gzip - Wikipedia]]
([TIME[2016-01-31 22:25:05 +09:00]] 版)
<https://ja.wikipedia.org/wiki/Gzip>
[42] [CITE@en[233047 – From some download servers, browser uncompresses gzip file, but keeps gz extension. Download manager is confused over file size and time remaining (nsBinaryDetector)]]
( ([TIME[2016-05-06 00:23:32 +09:00]]))
<https://bugzilla.mozilla.org/show_bug.cgi?id=233047>
[130] [CITE[ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic]]
( ([TIME[2014-04-07 05:27:56 +09:00]] 版))
<https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L128>
[FIG(quote)[
[FIGCAPTION[
[135] [CITE@en[mod_deflate - Apache HTTP Server Version 2.4]]
([TIME[2017-03-29 06:54:20 +09:00]])
<http://httpd.apache.org/docs/current/en/mod/mod_deflate.html>
]FIGCAPTION]
> Now if a request contains a Content-Encoding: gzip header, the body will be automatically decompressed. Few browsers have the ability to gzip request bodies. However, some special applications actually do support request compression, for instance some WebDAV clients.
]FIG]