Node.js:如何禁用分块传输编码?
我从一个节点服务器响应来自另一个位置的pipe道.zip文件的content-length
标题。 我已经通过下面的代码注入了一个content-length
头文件,但似乎transfer-encoding: chunked
覆盖它以某种方式。
响应头
HTTP/1.1 200 OK access-control-allow-origin: * connection: close content-type: application/zip date: Mon, 14 Jul 2014 03:47:00 GMT etag: "\"eb939974703e14ee9f578642972ed984\"" last-modified: Sat, 12 Jul 2014 02:15:52 GMT server: Apache-Coyote/1.1 set-cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sun, 13-Jul-2014 03:47:00 GMT transfer-encoding: chunked X-Powered-By: Express
码
var request = require('request'); var express = require('express'); var async = require('async'); var app = express(); app.get('/:bundle_id?', function(req, res) { var bundle_id = req.params.bundle_id; bundle_id = bundle_id.replace(/\.zip$/, ''); var url = "https://url....../bundles/" + bundle_id; async.waterfall([ function(callback) { request.get(url, function(req, res, data) { callback(null, JSON.parse(data).entities[0]['file-metadata']['content-length']); }); } ], function(err, contentLength) { request.get({ url: url, headers: { "Accept": "application/zip" } }).pipe(res); res.oldWriteHead = res.writeHead; res.writeHead = function(statusCode, reasonPhrase, headers) { res.header('Content-Length', contentLength); res.oldWriteHead(statusCode, reasonPhrase, headers); } }); }); app.listen(9000);
原来这实际上是一个相当简单的解决方法:在响应中将transfer-encoding
头设置为空string解决了问题:
... res.oldWriteHead = res.writeHead; res.writeHead = function(statusCode, reasonPhrase, headers) { res.header('Content-Length', contentLength); res.header('transfer-encoding', ''); // <-- add this line res.oldWriteHead(statusCode, reasonPhrase, headers); } ...
这样做的原因是因为在做了一些挖掘之后 ,似乎transfer-encoding
头代替了content-length
(因为两者不能共存)。 恰巧我用来testing的客户端select分块传输编码,而不是内容长度。
- var express = require('express'); var app = express(),什么是express()? 它是一种方法还是一个构造函数? 它从何而来
- 我可以防止多个静态目录在Express生产404?
- 在sails.js下使用SSL时,Passport.js无法初始化
- 如何链接到node_modules中的JavaScript文件?
- 快速/连接中间件的控制顺序
- 在快速路由处理程序中暂时覆盖原型方法是否安全?
- LocomotiveJS服务器端口更改
- 从Angular Controller调用节点函数的常用方法
- Nodejs Mongoose – TypeError:无效的sort()参数