Server responses should have a body if HEAD request
authorRyan Dahl <ry@tinyclouds.org>
Wed, 2 Jun 2010 21:46:29 +0000 (14:46 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 2 Jun 2010 22:07:15 +0000 (15:07 -0700)
lib/http.js
test/simple/test-http-head-response-has-no-body.js [new file with mode: 0644]

index 4763167..1cf9eca 100644 (file)
@@ -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 (file)
index 0000000..9a46ea6
--- /dev/null
@@ -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);
+});