la compression gzip de fragments de codage de la réponse?
Que j'essaie de faire de mon serveur est correctement gzip une réponse http qui est de l'encodage chunk.
ma compréhension de la non-gzip réponse est qu'il ressemble à ceci:
<the response headers>
et puis, pour chaque morceau,
<chunk length in hex>\r\n<chunk>\r\n
et enfin, d'une longueur de zéro morceau:
0\r\n\r\n
J'ai essayé d'obtenir une compression gzip de travail et je pourrais utiliser un peu d'aide pour comprendre ce qui doit être retourné. Cette documentation suppose que la totalité de la réponse doit être au format gzip, par opposition à gzipping chaque morceau:
HTTP servers sometimes use compression (gzip) or deflate methods to optimize transmission.
Chunked transfer encoding can be used to delimit parts of the compressed object.
In this case the chunks are not individually compressed. Instead, the complete payload
is compressed and the output of the compression process is chunk encoded.
J'ai essayé de gzip la chose entière et renvoyer la réponse, même sans en bloc, et ça ne fonctionne pas. J'ai essayé le réglage de l'Encodage de Contenu d'en-tête de "gzip". Quelqu'un peut m'expliquer quelles modifications doivent être apportées au schéma ci-dessus à l'appui de gzipping de morceaux? Merci.
Vous devez vous connecter pour publier un commentaire.
Vous gzip le contenu, et alors seulement d'appliquer les fragments de codage:
"Depuis "chunked" est le seul transfert de codage requis pour être compris par HTTP/1.1 les bénéficiaires, il joue un rôle crucial dans la délimitation des messages sur une connexion persistante. Chaque fois qu'un transfert de codage est appliqué à une charge utile de corps dans une demande, le transfert définitif de codage appliqué DOIT être "chunked". Si un transfert de codage est appliqué à une réponse de la charge utile du corps, puis le transfert définitif de codage appliqué DOIT être "chunked" ou le message DOIT être résilié par la fermeture de la connexion. Lorsque le "chunked" transfert de codage est utilisé, il DOIT être le dernier transfert de codage appliqué pour former le corps. Le "chunked" transfert de codage ne DOIT PAS être appliqué plus d'une fois dans un message du corps."
(HTTPbis Part1, Section 6.2.1)
Dans le cas où les autres réponses n'étaient pas assez claires:
D'abord vous gzip le corps avec zlib (ce qui peut être fait dans un cours d'eau de sorte que vous n'avez pas besoin de tout ça en mémoire à la fois, qui est le point de l'ensemble de la segmentation).
Puis vous envoyer ce corps comprimé en morceaux (sans doute ceux fournis par le gzip stream, avec le bloc d'en-tête de déclarer combien de temps il est), avec le Content-Encoding: gzip et Transfer-Encoding: chunked les en-têtes (et ne pas le Contenu de l'en-tête de Longueur).
Si vous êtes à l'aide de gzip ou zcat ou quelque utilité pour la compression, il ne sera probablement pas travailler. Doit être zlib. Si vous êtes en train de créer les morceaux, puis les compresser, qui ne fonctionnera certainement pas. Si vous pensez que vous êtes en train de faire de ce droit et il ne fonctionne pas, vous pourriez essayer de prendre un paquet de trace et de poser des questions en se basant sur celui-ci et les éventuels messages d'erreur que vous obtenez.
Probable que vous ne sont pas vraiment à l'envoi d'une manière appropriée au format gzip réponse.
Essayer de régler le
window bits
à31
dans zlib. Et l'utilisationdeflateInit2()
.gzip
commande de sortie à plusieurs têtes, mais qui DEVRAIT être compatible avec zlib qui est utilisé dans la plupart des autres clients HTTP/serveurs.Content-Length
en-tête ou est l'envoi des Fragments de réponse incorrecte. ou, c'est d'oublier quelque chose de simple comme une fuite de saut de ligne après les en-têtes.