当标头太大时,NodeJS http.request失败

时间:2016-06-23 17:54:09

标签: node.js http asp.net-web-api

我的代码如下

var http = require('http');
var host=...

var postData=({
         //some fun stuff
    })
    var postOptions ={
        host: host,
        path: '/api/dostuff',
        method: 'POST',
        headers:{
            AppID:"some stuff",
            Authorization: "OAuth token",
            "Content-Type":"application/json"
        },
    };

    var req = http.request(postOptions, function(res){
        var data = '';
        res.on('data', function (chunk) {
            data += chunk;
        });
        res.on('end', function () {
            //sanitize data stuff here
            console.log("DATA HERE: "+ data);

            return data;
        });
    });
    req.write(JSON.stringify(postData));
    req.end();

这是C#服务器的基本HTTP帖子。重要的是在标题中。我发送了应用ID(大约50个字符)和OAuth令牌(可以是数千个字符)。目前,服务器未设置为对Authorization标头执行任何操作。它甚至没有检查它是否在那里。

我的问题是,当我使用一些随机字符作为测试填充Authorization标头(或任何标头)时,帖子会成功。当我再次尝试使用完整的有效授权令牌(重申,很长)时,它失败了。无论我填充哪个标题部分,一旦它变得太满,就会返回错误。我收到的错误是“处理HTTP请求导致异常。请参阅此异常的'Response'属性返回的HTTP响应以获取详细信息”。我有点确定这是一个服务器问题,但当我尝试在Postman中运行完全相同的主体和标题时,我得到了有效的响应。

有没有人知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

有一个编译常量定义为80k for Node HTTP headers。你遇到了吗?我建议您查看OAuth令牌的标头大小。它不应该超过80k,而FWIW,甚至一个千字节对于OAuth来说都是巨大的......但无论如何......尝试转储标题的大小(以字节为单位)。