nodeJS-max-header-Größe in http.Anfrage
Mit nodeJS v0.10.28, gibt es eine Beschränkung in der Größe/Länge der header-Inhalt einer http-Anforderung?
Lassen Sie mich erklären:
Brauche ich, um zu konsumieren, rest-services, bereitgestellt durch eine 3rd-party-Anbieter. Die Daten zurückgegeben, die mir in den header der Anforderung, der Körper ist meist leer (120 oder so chars). Die Menge der Daten in den header variiert von ein paar chars auf mehrere 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();
Den code oben funktioniert gut für kleinere Header, sondern schlägt auf die on('error', mit "Parse Error" Meldung auf größeren Header.
Entfernen der on error-Klausel wirft diese 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)
Gibt es eine Grenze, die auf der header-Größe, kann es mich verändert? welche Lösung habe ich?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
HTTP-Protokoll-parser, der Knoten verwendet, erscheint zu hart kodiert werden mit einer maximalen header-Größe von
80KB
. Relevante Konstanten. Denn das ist ein compile-time-Konstante haben, müssten Sie eine benutzerdefinierte-kompilierte version von Knoten zu setzen, dass die Konstante größer.Es klingt wirklich wie der service, den Sie verwenden hat einen Fehler gemacht, indem Sie, dass viele Daten in einem header, obwohl. Header gemeint sind Metadaten, die über den request-body. Wenn Sie haben, dass viele Daten zurückgeben, sollten Sie wahrscheinlich werden, wie es in den request-body.
Könnten Sie erkunden mit einem alternativen HTTP-parser wie http-parser-js, da es nicht angezeigt, eine Grenze haben.
--max-http-header-size
Verwenden
--max-http-header-size
auf die Knoten-Befehl-Linie zu akzeptieren, größeren Header. Wenn Sie "Knoten: bad option: --max-http-header-Größe", upgrade auf Knoten v10.15.0 oder neuer. Relevant changelogKredit @murad.
Header sollte enthalten meta-Daten - wenn Sie passieren 80KB, dass bedeutet, dass Sie etwas falsch machen.
Node.js ermöglicht 80KB maximale Größe in header-Daten.
Lesen Sie mehr über http-Header hier:
https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
headers
gehören der query-string? dh, wenn ich einen query-string mit einem text-Wert, der15200
bytes, ist, dass, Hinzugefügt, um die header-Größe?