web-dev-qa-db-fra.com

Node Express Content-Length

J'utilise node.js et j'exprime dans un petit projet. Je mets l'en-tête de réponse comme un coup:

res.set({'Content-Type':'text/plain;charset=utf-8',    
'Content-Length': Buffer.byteLength(data, 'utf-8')});       

Je peux utiliser console.log la longueur des données d'impression est 317.

Mais à la console du navigateur, je reçois juste ceux-ci:

Connexion: garder en vie
Encodage de contenu: gzip
Content-Type: text/plain; charset = utf-8
Date: sam., 01 juin 2013 08:21:59 GMT
Transfert-Encodage: fragmenté
Varier: Accepter-Encodage
X-Powered-By: Express

Alors, pourquoi le content-length a disparu?

24
Allen Heavey

La réponse a Transfer-Encoding: chunked. Ici Content-Length n'est pas applicable, car le contenu est envoyé en une ou plusieurs parties (blocs) à l'intérieur du corps de la réponse, avec un marqueur indiquant la longueur en octets de chaque bloc individuel. http://en.wikipedia.org/wiki/Chunked_transfer_encoding

Par défaut, Node.js est Transfer-Encoding: chunked. Cependant, ceci est désactivé en définissant le Content-Length en-tête sur l'objet de réponse http natif. Documentation du module HTTP dit:

L'envoi d'un en-tête "Content-length" désactivera l'encodage en morceaux par défaut.

Passer par le Content-Encoding:gzip en-tête dans votre réponse, vous avez probablement activé le connect.compress middleware. Le connect.compress le middleware supprime le Content-Length entête.

Dans tous les cas, sauf si vous générez vous-même du contenu compressé, le Content-Length l'en-tête que vous générez vous-même serait certainement inapproprié pour le corps de réponse final (compressé). Heureusement, le middleware connect s'en charge pour vous.

Lorsque vous utilisez Express ou Connect, vous ne devez pas supposer que les choses que vous "envoyez" avec l'objet res sont réellement envoyées de cette façon au client. Il y a un middleware entre les deux. Tous les middlewares ont la possibilité de modifier à peu près tout ce qui concerne la réponse, y compris le changement du corps de la réponse, l'ajout, la suppression et la modification des en-têtes. Il en va de même pour la demande.

Voir aussi ces questions:

41
Myrne Stol