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: