diff --git a/lib/http.js b/lib/http.js index 476316743f..1cf9ecaf1e 100644 --- a/lib/http.js +++ b/lib/http.js @@ -526,6 +526,8 @@ OutgoingMessage.prototype.end = function (data, encoding) { function ServerResponse (req) { OutgoingMessage.call(this, req.socket); + if (req.method === 'HEAD') this._hasBody = false; + if (req.httpVersionMajor < 1 || req.httpVersionMinor < 1) { this.useChunkedEncodingByDefault = false; this.shouldKeepAlive = false; diff --git a/test/simple/test-http-head-response-has-no-body.js b/test/simple/test-http-head-response-has-no-body.js new file mode 100644 index 0000000000..9a46ea69e4 --- /dev/null +++ b/test/simple/test-http-head-response-has-no-body.js @@ -0,0 +1,31 @@ +require('../common'); + +var http = require('http'); + +// This test is to make sure that when the HTTP server +// responds to a HEAD request, it does not send any body. +// In this case it was sending '0\r\n\r\n' + +var server = http.createServer(function(req, res) { + res.writeHead(200); // broken: defaults to TE chunked + res.end(); +}); +server.listen(PORT); + +responseComplete = false; + +var req = http.createClient(PORT).request('HEAD', '/') +error('req'); +req.end(); +req.addListener('response', function (res) { + error('response'); + res.addListener('end', function() { + error('response end'); + server.close(); + responseComplete = true; + }); +}); + +process.addListener('exit', function () { + assert.ok(responseComplete); +});