gpt4 book ai didi

node.js - Node Express 内容长度

转载 作者:IT老高 更新时间:2023-10-28 22:08:00 31 4
gpt4 key购买 nike

我使用 node.js 并在一个小项目中表达。我设置了像打击一样的响应头:

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

我可以使用console.log打印数据的长度是317。

但是在浏览器的控制台上,我只得到这些:

Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/plain;charset=utf-8
Date:Sat, 01 Jun 2013 08:21:59 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:Express

那么,为什么 content-length 消失了?

最佳答案

响应有 Transfer-Encoding: chunked。这里 Content-Length 不适用,因为内容是在响应正文内的一个或多个部分( block )中发送的,并带有指示每个单独 block 的字节长度的标记。 http://en.wikipedia.org/wiki/Chunked_transfer_encoding

Node.js 默认为 Transfer-Encoding: chunked。但是,通过在 native http 响应对象上设置 Content-Length header 可以禁用此功能。 Documentation of HTTP module说:

Sending a 'Content-length' header will disable the default chunked encoding.

通过响应中的 Content-Encoding:gzip header ,您可能已经启用了 connect.compress 中间件。 connect.compress 中间件删除 Content-Length header 。

在任何情况下,除非您自己生成压缩内容,否则您自己生成的 Content-Length header 肯定不适合最终(压缩)响应正文。幸运的是,connect 中间件会为您解决这个问题。

在使用 Express 或 Connect 时,您不应假设您使用 res 对象“发送”的内容实际上是以这种方式发送到客户端的。中间有中间件。所有中间件都能够更改响应的任何内容,包括更改响应正文,以及添加、删除和更改 header 。请求也是如此。

另请参阅以下问题:

关于node.js - Node Express 内容长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16870904/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com