对于nodeJS v0.10.28,http请求中的标头内容的大小/长度是否有限制?
让我解释:
我需要使用第三方提供商提供的休息服务.返回给我的数据在请求的标题中,正文大部分是空的(120左右的字符).标头中的数据量从几个字符到几百字节不等.
var https = require('https'); var httpHeaders = { Authorization: 'Basic ' + new Buffer(user + ':' + psw).toString('base64'),accept: '*/*','Content-Type': 'text/plain; charset=utf-8' }; var options = { host: "www.website.com",port: 8080,path: "/",method: 'GET',headers: httpHeaders,rejectUnauthorized: false,requestCert: true,agent: false }; https.request(options,function(res) { res.setEncoding('utf8'); if (res.statusCode == 200) { var json = res.headers["someHeaderInfo"]; callback(null,{ "result" : JSON.parse(json) }); } else { callback({ "error" : res.statusCode }); } }).on('data',function (chunk) { console.log('BODY: ' + chunk); }).on('error',function(e,res) { console.log(" Got error: " + e.message); callback({ "error" : e.message }); }).end();
上面的代码适用于较小尺寸的标题,但在on(‘error’,在较大的标题上带有“Parse Error”消息时失败.
删除on error子句会引发此异常:
Error: Parse Error at CleartextStream.socketonData (http.js:1583:20) at CleartextStream.read [as _read] (tls.js:511:12) at CleartextStream.Readable.read (_stream_readable.js:320:10) at EncryptedStream.write [as _write] (tls.js:366:25) at doWrite (_stream_writable.js:226:10) at writeOrBuffer (_stream_writable.js:216:5) at EncryptedStream.Writable.write (_stream_writable.js:183:11) at write (_stream_readable.js:582:24) at flow (_stream_readable.js:591:7) at Socket.pipeOnReadable (_stream_readable.js:623:5)
谢谢
解决方法
Node使用的HTTP协议解析器似乎是硬编码的,最大标头大小为80KB.
Relevant constant.由于这是一个编译时常量,你必须使用自定义编译的Node版本来设置更大的常量.
听起来你正在使用的服务通过将大量数据放入标题中而犯了错误.标头用于有关请求正文的元数据.如果他们要返回那么多数据,他们应该将它包含在请求体中.
您可以使用像http-parser-js这样的备用HTTP解析器进行探索,因为它似乎没有限制.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。