Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour,

J'ai activé la compression sur un forum phpBB, et je constate qu'effectivement les pages sont compressées mais l'entete je vois qu'elles sont en plus "chunked" :

Transfer-Encoding chunked

Que cela signifie-t-il ?

Modifié par adn
Posté

Cel signifie que le contenu te ta page est transféré en morceaux dont la taille est spécifié juste avant chacun d'eux...

Ce qui donnerait :

HTTP/1.1 200 OK
Transfer-Encoding: chunked
<taille-morceau1>
<données-morceau1>
<taille-morceau2>
<données-morceau2>
0

Le "0" correspond à la fin du fichier...cela indique que le prochain morceau est vide et HTTP sait ainsi qu'il n'y a plus de morceaux.

Au niveau de la compression, cela n'a aucun effet...car tes données sont compressées, puis morcellées...et ensuite ton client reçoit toutes les données, morceau par morceau, et une fois qu'il a reconstitué le tout il effectue la décompression.

D'après la RFC2616, le transfer-encoding spécifie la transformation de entity-body dans le message-body (aux points 3.6, 7.2). Et que content-encoding spécifie une transformation de la donnée entité dans le entity-body (au point 7.2.1). Et donc le client DOIT d'abord inverser la transofrmation de transfer-encoding, puis celle de content-encoding.

Posté

Merci pour ta réponse très précise !

Sais-tu quelles les incidences sur les perfos ? Est-ce plutôt mieux d'avoir les pages chunked ?

En fait, c'est l'activation sur phpBB de la compression qui a activé ce mode.

Posté
The Chunked transfer-coding

HTTP/1.1 resolves the problem of delimiting message bodies by introducing the Chunked transfer-coding. The sender breaks the message body into chunks of arbitrary length, and each chunk is sent with its length prepended; it marks the end of the message with a zero-length chunk. The sender uses the Transfer-Encoding: chunked header to signal the use of chunking.

Le marquage du début et de la fin des messages HTTP...c'est très important, car avec HTTP 1.0 on le savais que lorsque l'en-tête Content-Length était spécifiée.
This mechanism allows the sender to buffer small pieces of the message, instead of the entire message, without adding much complexity or overhead. All HTTP/1.1 implementations must be able to receive chunked messages.
Possibilité de mettre en mémoire tampon de morceaux de données...pas uniquement des pages complètes (j'ai pas souvenir d'un client utilisant ceci :S)
The Chunked transfer-coding solves another problem, not related to performance. In HTTP/1.0, if the sender does not include a Content-Length header, the recipient cannot tell if the message has been truncated due to transmission problems. This ambiguity leads to errors, especially when truncated responses are stored in caches.
En gros, avec le transfert en morceaux, si tu ne spécifie pas de "Content-Length" le client pourra repartir des derniers morceaux téléchargés lorsqu'il y a interruption de transfert.

Source: http://www.research.att.com/~bala/papers/h0vh1.html

Les performances sont améliorées dans le sens ou les données sont transmises par flux (streaming) et non envoyée en un bloc... mais j'avoue que je ne comprends pas pourquoi dans le cadre de données compressées ils utilisent cette en-tête. Comme je l'ai expliqué avant..d'abord on reçoit tout puis on décompresse lorsque ce sont des données compressées (et le navigateur le sait car pour envoyer des données compressé on envoie Content-Encoding: gzip;), alors que ce soit par flux successifs ou non je ne pense pas que cela ait de l'importance.

Posté

Merci TheRec de ces explications claires :)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...