Node.js:如何禁用分块传输编码?

Node.js:如何禁用分块传输编码?,node.js,express,http-headers,Node.js,Express,Http Headers,我在从另一个位置传送.zip文件的节点服务器的响应中缺少内容长度头。我已经通过下面的代码注入了内容长度标题,但似乎传输编码:chunked正在以某种方式覆盖它 响应头 代码 事实证明,这实际上是一个相当简单的修复方法:在响应中将传输编码头设置为空字符串解决了问题: ... res.oldWriteHead = res.writeHead; res.writeHead = function(statusCode, reasonPhrase, headers) { res.header('C

我在从另一个位置传送.zip文件的节点服务器的响应中缺少
内容长度
头。我已经通过下面的代码注入了
内容长度
标题,但似乎
传输编码:chunked
正在以某种方式覆盖它

响应头 代码
事实证明,这实际上是一个相当简单的修复方法:在响应中将
传输编码
头设置为空字符串解决了问题:

...
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);
}
...
。。。
res.oldWriteHead=res.writeHead;
res.writeHead=函数(状态代码、原因短语、标题){
res.header('Content-Length',contentLength);

res.header('transfer-encoding','');//在响应头中将“transfer-encoding”设置为空字符串对我不起作用。我需要设置“content length”,仅此一点就足以防止分块编码。我想知道为什么这种行为与您描述的行为不同。它实际上没有区别-根据HTTP规范,如果您不指定内容长度,它默认为分块。我的意思是它与您的解决方案不同。显然,对于您来说,设置内容长度头是不够的。
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);
...
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);
}
...