update tutorial node instalar ejemplos actualizar node.js express content-length

node.js - tutorial - npm



Nodo expreso contenido-longitud (1)

Yo uso node.js y expreso en un pequeño proyecto. Puse el encabezado de respuesta como un golpe

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

Puedo usar la longitud de los datos de impresión de console.log es 317.

Pero en la consola del navegador, acabo de obtener estos:

Conexión: mantener vivo
Codificación de contenido: gzip
Tipo de contenido: texto / sin formato; conjunto de caracteres = utf-8
Fecha: sábado, 01 de junio de 2013 08:21:59 GMT
Codificación de transferencia: fragmentado
Variar: Aceptar-Codificar
X-Powered-By: Express

Entonces, ¿por qué desapareció la longitud del contenido ?


La respuesta tiene Transfer-Encoding: chunked . Aquí Content-Length no es aplicable, porque el contenido se envía en una o más partes (fragmentos) dentro del cuerpo de la respuesta, con un marcador que indica la longitud en bytes de cada fragmento individual. http://en.wikipedia.org/wiki/Chunked_transfer_encoding

Node.js por defecto es Transfer-Encoding: chunked . Sin embargo, esto se deshabilita al configurar el encabezado Content-Length en el objeto de respuesta http nativo. La documentación del módulo HTTP dice:

El envío de un encabezado ''Contenido de longitud'' deshabilitará la codificación fragmentada predeterminada.

Al ir en la cabecera Content-Encoding:gzip en su respuesta, probablemente haya habilitado el middleware connect.compress . El middleware connect.compress elimina el encabezado Content-Length .

En cualquier caso, a menos que esté generando contenido gzipped usted mismo, el encabezado Content-Length que genere usted mismo sería inapropiado para el cuerpo de respuesta final (gzipped). Afortunadamente, el middleware de conexión se encarga de eso por ti.

Cuando use Express o Connect, no debe asumir que las cosas que "envía" con el objeto res realmente se envían de esa manera al cliente. Hay middleware en el medio. Todo middleware tiene la capacidad de cambiar casi cualquier cosa acerca de la respuesta, incluido el cambio del cuerpo de respuesta, y la adición, eliminación y cambio de encabezados. Lo mismo ocurre con la solicitud.

Vea también estas preguntas: