我使用node.js并在一个小项目中表达。我将响应头设置为打击:
res.set({'Content-Type':'text/plain;charset=utf-8', 'Content-Length': Buffer.byteLength(data, 'utf-8')});
我可以使用console.log打印数据的长度为317。
console.log
但是在浏览器的控制台上,我得到了这些:
连接:keep-alive 内容编码:gzip 内容类型:文本/纯文本; charset = utf- 8日期 :2013年6月1日星期六,08 :21:59 GMT 传输编码:块状 变化:接受编码 X-Powered-作者:快递
那么,为什么 内容长度 消失了?
回应有Transfer-Encoding: chunked。这Content- Length是不适用的,因为内容是在响应主体内的一个或多个部分(块)中发送的,其中的标记指示每个单独块的字节长度。http://en.wikipedia.org/wiki/Chunked_transfer_encoding
Transfer-Encoding: chunked
Content- Length
Node.js默认为Transfer-Encoding: chunked。但是,通过Content- Length在本机http响应对象上设置标头可以禁用此功能。HTTP模块的文档说:
发送“ Content-length”标头将禁用默认的分块编码。
Content- Encoding:gzip在响应中的标题旁边,您可能已启用了connect.compress中间件。所述connect.compress中间件去除Content- Length报头。
Content- Encoding:gzip
connect.compress
无论如何,除非您自己生成压缩的内容,否则生成的Content-Length标头肯定不适合最终(压缩)响应正文。幸运的是,连接中间件为您解决了这一问题。
Content-Length
使用Express或Connect时,您不应假定与res对象一起“发送”的内容实际上是通过这种方式发送给客户端的。中间有中间件。所有中间件都具有更改响应的几乎所有功能的能力,包括更改响应主体以及添加,删除和更改标头。要求也一样。