web-dev-qa-db-fra.com

Pourquoi les serveurs du monde réel préfèrent-ils gzip au codage deflate?

Nous savons déjà l'encodage dégonflé est un gagnant sur gzip en ce qui concerne la vitesse d'encodage, de décodage et de taille de compression.

Alors pourquoi aucun gros site (que je peux trouver) ne l'envoie (quand j'utilise un navigateur qui l'accepte)?

Yahoo affirme deflate est "moins efficace". Pourquoi?

Je maintiens un logiciel de serveur HTTP qui préfère dégonfler, donc j'aimerais savoir s'il y a une très bonne raison de ne pas continuer à le faire.

61
Steve Clay

Il y a une certaine confusion sur la dénomination entre les spécifications et le HTTP:

  • [~ # ~] deflate [~ # ~] tel que défini par RFC 1951 est un format de données compressées .
  • [~ # ~] zlib [~ # ~] tel que défini par RFC 195 est un format de données compressées qui utilise le format de données [~ # ~] deflate [~ # ~].
  • [~ # ~] gzip [~ # ~] tel que défini par RFC 1952 est un format de fichier qui utilise le format de données compressées [~ # ~] deflate [~ # ~].

Mais le HTTP utilise un nom différent :

  • gzip Un format d'encodage produit par le programme de compression de fichiers "gzip" (GNU Zip) comme décrit dans la RFC 1952 [25]. Ce format est un codage Lempel-Ziv (LZ77) avec un CRC 32 bits.

  • deflate Le format "zlib" défini dans la RFC 1950 [31] en combinaison avec le mécanisme de compression "dégonfler" décrit dans la RFC 1951 [ 29].

Pour résumer:

  • gzip est le format de fichier [~ # ~] gzip [~ # ~].
  • deflate est en fait le format de données [~ # ~] zlib [~ # ~]. (Mais certains clients acceptent également le format de données réel [~ # ~] deflate [~ # ~] pour deflate.)

Voir aussi cette réponse à la question Quelle est la différence entre les encodages HTTP 1.1 "gzip" et "deflate"? :

Quelle est la différence entre les encodages HTTP 1.1 "gzip" et "deflate"?

"gzip" est le format gzip et "deflate" est le format zlib. Ils auraient probablement dû appeler le second "zlib" à la place pour éviter toute confusion avec le format de données compressées raw deflate. Alors que la RFC 2616 HTTP 1.1 pointe correctement vers la spécification zlib de la RFC 1950 pour le codage de transfert "dégonflé", il y a eu des rapports de serveurs et de navigateurs qui produisent ou s'attendent à des données brutes de dégonflage selon les spécifications de dégonflage de la RFC 1951, notamment Microsoft . Ainsi, même si le codage de transfert "deflate" utilisant le format zlib serait l'approche la plus efficace (et en fait exactement ce pour quoi le format zlib a été conçu), l'utilisation du codage de transfert "gzip" est probablement plus fiable en raison d'un choix malheureux de nom de la part des auteurs HTTP 1.1.

72
Gumbo

D'après mes tests minimaux, il apparaît que la plupart des HTTPds:

  1. ne supporte pas deflate à la volée: mod_deflate d'Apache (une surprise), GWS
  2. ou préférez envoyer gzip: IIS, mod_compress de lighttpd

Donc, pour envoyer deflate sur le serveur le plus populaire (Apache), vous devez maintenir des fichiers pré-encodés et utiliser mod_negotiate (vous devrez peut-être même utiliser des types-maps pour préférer deflate).

Je suppose qu'en raison de ce problème, deflate est rarement utilisé, et par conséquent, les bogues sont plus susceptibles d'exister dans le support client deflate que dans le support gzip.

9
Steve Clay

Consultez ce site Web pour plus d'informations: http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests


Deflate, par spécification, est en fait zlib (un format de compression développé spécifiquement pour le streaming de contenu sur le Web) ... qui est un wrapper autour de deflate.

Internet Explorer, cependant, implémente incorrectement HTTP 1.1 deflate (zlib) en tant que raw deflate. Donc, si votre serveur envoie du contenu correct HTTP 1.1 deflate (zlib) à IE), il s'étouffe.

J'ai fait des recherches sur le sujet un peu et il semble prudent d'envoyer TOUJOURS raw dégonflé aux navigateurs modernes ... assurez-vous simplement que c'est bien le cas. raw et non zlib.

Consultez cet article pour plus d'informations> Gzip vs Deflate (zlib) revisité .

Je pense donc qu'il y a une bonne raison de continuer à envoyer deflate via gzip.

7
David Murdoch

Autant que je sache (avertissement: et je ne suis pas un expert ici, juste ce que j'ai entendu), gzip utilise le même algorithme que deflate mais il a plus de trucs d'en-tête qui font il a une taille plus grande (par rapport à deflate). Cependant, je pense que deflate est pris en charge par moins de clients et de mandataires.

6
Mehrdad Afshari

Je me demandais la même chose :). Je pense que cela pourrait être lié à la compatibilité des navigateurs plus anciens (peut-être anciens). J'ai lu quelque part que les navigateurs plus anciens sont plus susceptibles de se faufiler sur le contenu dégonflé que mod_gzippé dans certains cas (?) Mais googler cela m'a conduit à conclure qu'il est probablement préférable d'arrêter de le googler.

1
karim79

ActionScript 3 prend en charge native deflate, mais pour gzip, vous devez utiliser une bibliothèque externe

0
Alexander Farber