Warum erzeugt mein C # gzip eine größere Datei als Fiddler oder PHP?

Wenn ich diesen Text zippe:

Hallo Welt

durch C # mit diesem Code:

Stream stream = new MemoryStream(Encoding.Default.GetBytes("Hello World"));
var compressedMemoryStream = new MemoryStream();
using (var gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
{
    stream.CopyTo(gzipStream);  
    gzipStream.Close(); 
} 

Der resultierende Stream ist 133 Byte lang

Führen Sie die gleiche Saite durch FiddlersUtilities.GzipCompress oderdiese PHP-Seite Das Ergebnis ist nur 31 Byte lang.

In beiden Fällen ist die Eingabe 11 Bytes, also würde ich mir vorstellen, dass das PHP-Ergebnis korrekt ist, aber das bedeutet natürlich, dass ich die PHP-ZIP-Datei nicht in .NET oder umgekehrt dekomprimieren kann. Warum ist die .NET-Ausgabe so viel größer?

Tatsächlich stellt sich heraus, dass das Ergebnis von PHP und Fiddler zwar dieselbe Länge hat, aber nicht dieselbe ist. Ich kann die PHP-Version in .NET dekomprimieren, aber nicht die Fiddler-Version. Die PHP-Seite dekomprimiert alle drei, so dass es den Anschein hat, als ob eine Inkompatibilität zwischen der Implementierung von gzip durch Fiddler und .NET besteht.

Wie gewünscht habe ich die drei Ausgänge auf Dropbox hochgeladenHier.

Und dies sind die rohen Hexdumps dieser Dateien (nicht sicher, ob sie wirklich so verwendet werden, aber ich denke, es zeigt, dass der Unterschied zwischen der Fiddler- und der PHP-Version im Header liegt und nicht in den komprimierten Daten selbst):

Geiger:

0000-0010:  1f 8b 08 00-c2 e6 ff 4f-00 ff f3 48-cd c9 c9 57  .......O ...H...W
0000-001f:  08 cf 2f ca-49 01 00 56-b1 17 4a 0b-00 00 00     ../.I..V ..J....

PHP:

0000-0010:  1f 8b 08 00-00 00 00 00-00 03 f3 48-cd c9 c9 57  ........ ...H...W
0000-001f:  08 cf 2f ca-49 01 00 56-b1 17 4a 0b-00 00 00     ../.I..V ..J....

C #:

0000-0010:  1f 8b 08 00-00 00 00 00-04 00 ec bd-07 60 1c 49  ........ .....`.I
0000-0020:  96 25 26 2f-6d ca 7b 7f-4a f5 4a d7-e0 74 a1 08  .%&/m.{. J.J..t..
0000-0030:  80 60 13 24-d8 90 40 10-ec c1 88 cd-e6 92 ec 1d  .`.$..@. ........
0000-0040:  69 47 23 29-ab 2a 81 ca-65 56 65 5d-66 16 40 cc  iG#).*.. eVe]f.@.
0000-0050:  ed 9d bc f7-de 7b ef bd-f7 de 7b ef-bd f7 ba 3b  .....{.. ..{....;
0000-0060:  9d 4e 27 f7-df ff 3f 5c-66 64 01 6c-f6 ce 4a da  .N'...?\ fd.l..J.
0000-0070:  c9 9e 21 80-aa c8 1f 3f-7e 7c 1f 3f-22 be 9d 97  ..!....? ~|.?"...
0000-0080:  65 95 7e b7-aa cb d9 ff-13 00 00 ff-ff 56 b1 17  e.~..... .....V..
0000-0085:  4a 0b 00 00-00

Antworten auf die Frage(5)

Ihre Antwort auf die Frage