With nodeJS v0.10.28, is there a limit in the size/length of the header content in an http request?
Let me explain:
I need to consume rest services provided by a 3rd party provider. The data returned to me is in the header of the request, the body is mostly empty (120 or so chars). The amount of data in the header varies from a few chars to several 100kb.
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();
The code above works fine for smaller size headers but fails on the on('error', with "Parse Error" message on larger headers.
Removing the on error clause throws this exception:
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)
Is there a limit on the header size, can it me changed? what solution do I have?
Thanks
No, HTTP does not define any limit. However most web servers do limit size of headers they accept. For example in Apache default limit is 8KB, in IIS it's 16K. Server will return 413 Entity Too Large error if headers size exceeds that limit.
Node provides us with different ways to change the header size. When you run node server. js , just add the line --max-http-header-size=1024 before server. js and you can change the value 1024 .
The header tells the server details about the request such as what type of data the client, user, or request wants in the response. Type can be html , text , JSON , cookies or others.
Use --max-http-header-size
on the node command-line to accept larger headers. If you get "node: bad option: --max-http-header-size", upgrade to node v10.15.0 or newer. Relevant changelog
node --max-http-header-size 15000 client.js
Credit to @murad.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With