【问题标题】:node.js node-http-proxy not receiving trailersnode.js node-http-proxy 没有收到预告片
【发布时间】:2016-01-13 14:38:43
【问题描述】:

我正在向 Node 中的响应添加预告片,但我似乎无法将预告片作为消息的一部分接收。我想用它来将计时信息发送回我用 Node 编写的负载均衡器,这样它就可以监控请求是否在特定工作人员中排队很长时间。

我正在尝试仅使用一个基本应用程序来使其首先运行,这是我从addTrailers 的文档中获取的:

var http = require("http");

var server = http.createServer(function (req, res) {
     var fileData = "Hello World!";
     res.writeHead(200, { 'Content-Type': 'text/plain',
     'Trailer': 'my-trailer' });
     res.write(fileData);
     res.write("\r\n");
     res.addTrailers({'my-trailer': 'test'});
     res.end();
});
server.listen(12345);

我在负载均衡器中使用 node-http-proxy,但它没有收到预告片,Charles Proxy 没有显示它们,curl 7.35 也没有。但是,wireshark 确实会在数据包末尾显示数据:

c
Hello World!
2


0
my-trailer: test

有谁知道你必须做什么才能让 Node 从消息中解析预告片而不是丢弃它?

【问题讨论】:

    标签: node.js node-http-proxy


    【解决方案1】:

    经过深入调查,直到http.ClientRequest 发出end 事件(我猜这是有道理的)才设置预告片。这在node-http-proxy 上没有记录,但请查看它发出的代码。

    所以我们可以为end 事件设置一个处理程序

    proxy = httpProxy.createProxyServer();
    proxy.on("end", function(req, res, proxyRes){
        console.log(proxyRes.trailers);
    });
    proxy.listen(8000);
    

    我的预告片就在那里!

    { 'x-worker-duration': '7.397' }
    

    【讨论】:

    • 对于遇到此问题的任何其他人 - Trailer 标头仅对分块编码有效 - 它在任何其他情况下均无效。上面应用的问题和 hack,很可能是因为响应没有被分块编码。
    猜你喜欢
    • 2012-10-28
    • 2018-09-25
    • 2011-09-20
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2021-06-28
    相关资源
    最近更新 更多