All*_*vey 21 content-length node.js express
我使用node.js并在一个小项目中表达.我设置响应标题像打击:
res.set({'Content-Type':'text/plain;charset=utf-8',
'Content-Length': Buffer.byteLength(data, 'utf-8')});
Run Code Online (Sandbox Code Playgroud)
我可以使用console.log打印数据的长度是317.
但是在浏览器的控制台上,我只是得到了这些:
连接:keep-alive
内容编码:gzip
内容类型:text/plain; charset = utf-
8日期:Sat,01 Jun 2013 08:21:59 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-通过:快递
那么,为什么内容长度消失了?
Myr*_*tol 37
回应了Transfer-Encoding: chunked.这Content-Length不适用,因为内容是在响应主体内的一个或多个部分(块)中发送的,其中标记指示每个单独块的字节长度.http://en.wikipedia.org/wiki/Chunked_transfer_encoding
Node.js默认为Transfer-Encoding: chunked.但是,通过Content-Length在本机http响应对象上设置标头来禁用此功能.HTTP模块的文档说:
发送"Content-length"标头将禁用默认的chunked编码.
通过Content-Encoding:gzip响应中的标题,您可能启用了connect.compress中间件.所述connect.compress中间件去除Content-Length报头.
在任何情况下,除非您自己生成gzip压缩内容,否则您自己Content-Length生成的标题肯定不适合最终(gzipped)响应正文.幸运的是,连接中间件可以为您解决这个问题.
使用Express或Connect时,您不应该假设您使用res对象"发送"的内容实际上以这种方式发送到客户端.介于两者之间的中间件.所有中间件都能够更改响应的任何内容,包括更改响应主体,添加,删除和更改标头.同样适用于请求.
另见这些问题:
| 归档时间: |
|
| 查看次数: |
22458 次 |
| 最近记录: |