diff options
author | mog422 <admin@mog422.net> | 2017-09-11 11:00:10 +0900 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-10-19 18:15:58 +0200 |
commit | f2f391e575fc8072d10e1ad1601ef3f67f13a4db (patch) | |
tree | 2c7e43cbeffcec392e4a2252ac6203369207333b /lib/_http_server.js | |
parent | d6ba14e5a52c393cbb9a01e55122ca9beff4df13 (diff) | |
download | android-node-v8-f2f391e575fc8072d10e1ad1601ef3f67f13a4db.tar.gz android-node-v8-f2f391e575fc8072d10e1ad1601ef3f67f13a4db.tar.bz2 android-node-v8-f2f391e575fc8072d10e1ad1601ef3f67f13a4db.zip |
http: send 400 bad request on parse error
A web server such as nginx assumes that upstream is dead
if upstream closes the socket without any response.
PR-URL: https://github.com/nodejs/node/pull/15324
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Diffstat (limited to 'lib/_http_server.js')
-rw-r--r-- | lib/_http_server.js | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/_http_server.js b/lib/_http_server.js index 458988fad8..a133c2c153 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -38,6 +38,7 @@ const { const { OutgoingMessage } = require('_http_outgoing'); const { outHeadersKey, ondrain } = require('internal/http'); const errors = require('internal/errors'); +const Buffer = require('buffer').Buffer; const STATUS_CODES = { 100: 'Continue', @@ -451,13 +452,21 @@ function onParserExecute(server, socket, parser, state, ret, d) { onParserExecuteCommon(server, socket, parser, state, ret, undefined); } +const badRequestResponse = Buffer.from( + 'HTTP/1.1 400 ' + STATUS_CODES[400] + CRLF + CRLF, 'ascii' +); function socketOnError(e) { // Ignore further errors this.removeListener('error', socketOnError); this.on('error', () => {}); - if (!this.server.emit('clientError', e, this)) + if (!this.server.emit('clientError', e, this)) { + if (this.writable) { + this.end(badRequestResponse); + return; + } this.destroy(e); + } } function onParserExecuteCommon(server, socket, parser, state, ret, d) { |