diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js index cb09e764fefdfb..a4a2b3ab144400 100644 --- a/lib/_http_outgoing.js +++ b/lib/_http_outgoing.js @@ -573,6 +573,7 @@ function write_(msg, chunk, encoding, callback, fromEnd) { if (!msg._hasBody) { debug('This type of response MUST NOT have a body. ' + 'Ignoring write() calls.'); + if (callback) process.nextTick(callback); return true; } diff --git a/test/parallel/test-http-outgoing-message-write-callback.js b/test/parallel/test-http-outgoing-message-write-callback.js index a51d37351d4c9e..3a32285faaff55 100644 --- a/test/parallel/test-http-outgoing-message-write-callback.js +++ b/test/parallel/test-http-outgoing-message-write-callback.js @@ -3,35 +3,37 @@ const common = require('../common'); // This test ensures that the callback of `OutgoingMessage.prototype.write()` is -// called also when writing empty chunks. +// called also when writing empty chunks or when the message has no body. const assert = require('assert'); const http = require('http'); const stream = require('stream'); -const expected = ['a', 'b', '', Buffer.alloc(0), 'c']; -const results = []; +for (const method of ['GET, HEAD']) { + const expected = ['a', 'b', '', Buffer.alloc(0), 'c']; + const results = []; -const writable = new stream.Writable({ - write(chunk, encoding, callback) { - setImmediate(callback); - } -}); + const writable = new stream.Writable({ + write(chunk, encoding, callback) { + callback(); + } + }); -const res = new http.ServerResponse({ - method: 'GET', - httpVersionMajor: 1, - httpVersionMinor: 1 -}); + const res = new http.ServerResponse({ + method: method, + httpVersionMajor: 1, + httpVersionMinor: 1 + }); -res.assignSocket(writable); + res.assignSocket(writable); -for (const chunk of expected) { - res.write(chunk, () => { - results.push(chunk); - }); -} + for (const chunk of expected) { + res.write(chunk, () => { + results.push(chunk); + }); + } -res.end(common.mustCall(() => { - assert.deepStrictEqual(results, expected); -})); + res.end(common.mustCall(() => { + assert.deepStrictEqual(results, expected); + })); +}