http: flush stored header
authorVladimir Kurchatkin <vladimir.kurchatkin@gmail.com>
Wed, 13 May 2015 15:52:49 +0000 (18:52 +0300)
committerVladimir Kurchatkin <vladimir.kurchatkin@gmail.com>
Fri, 29 May 2015 13:19:12 +0000 (16:19 +0300)
`flushHeaders` should work for header written
with `writeHead`.

PR-URL: https://github.com/nodejs/io.js/pull/1695
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
lib/_http_outgoing.js
test/parallel/test-http-flush-headers.js
test/parallel/test-http-flush-response-headers.js [new file with mode: 0644]

index 6ebf716..952b2ed 100644 (file)
@@ -636,10 +636,11 @@ OutgoingMessage.prototype._flush = function() {
 
 OutgoingMessage.prototype.flushHeaders = function() {
   if (!this._header) {
-    // Force-flush the headers.
     this._implicitHeader();
-    this._send('');
   }
+
+  // Force-flush the headers.
+  this._send('');
 };
 
 OutgoingMessage.prototype.flush = util.deprecate(function() {
index da1bd24..e3c9761 100644 (file)
@@ -5,7 +5,7 @@ const http = require('http');
 
 const server = http.createServer();
 server.on('request', function(req, res) {
-  assert(req.headers['foo'], 'bar');
+  assert.equal(req.headers['foo'], 'bar');
   res.end('ok');
   server.close();
 });
diff --git a/test/parallel/test-http-flush-response-headers.js b/test/parallel/test-http-flush-response-headers.js
new file mode 100644 (file)
index 0000000..76e7397
--- /dev/null
@@ -0,0 +1,27 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const http = require('http');
+
+const server = http.createServer();
+
+server.on('request', function(req, res) {
+  res.writeHead(200, {'foo': 'bar'});
+  res.flushHeaders();
+  res.flushHeaders(); // Should be idempotent.
+});
+server.listen(common.PORT, common.localhostIPv4, function() {
+  var req = http.request({
+    method: 'GET',
+    host: common.localhostIPv4,
+    port: common.PORT,
+  }, onResponse);
+
+  req.end();
+
+  function onResponse(res) {
+    assert.equal(res.headers['foo'], 'bar');
+    res.destroy();
+    server.close();
+  }
+});