From 8ca2194a371ac5b69af11a71748db16e7cf3262a Mon Sep 17 00:00:00 2001 From: Dylan Conway <35280289+dylan-conway@users.noreply.github.com> Date: Tue, 11 Jul 2023 18:49:35 -0700 Subject: fix #3597 (#3609) * fix #3597 * Update http.ts * initialize to true --- src/js/node/http.ts | 19 +++++++++++++++++++ src/js/out/modules/node/http.js | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/js/node/http.ts b/src/js/node/http.ts index 42388b32e..fe075c832 100644 --- a/src/js/node/http.ts +++ b/src/js/node/http.ts @@ -973,6 +973,10 @@ export class ServerResponse extends Writable { this.#firstWrite = undefined; this._writableState.decodeStrings = false; this.#deferred = undefined; + + // this is matching node's behaviour + // https://github.com/nodejs/node/blob/cf8c6994e0f764af02da4fa70bc5962142181bf3/lib/_http_server.js#L192 + if (req.method === "HEAD") this._hasBody = false; } req; @@ -988,6 +992,7 @@ export class ServerResponse extends Writable { _defaultKeepAlive = false; _removedConnection = false; _removedContLen = false; + _hasBody = true; #deferred: (() => void) | undefined = undefined; #finished = false; // Express "compress" package uses this @@ -1835,6 +1840,20 @@ function _writeHead(statusCode, reason, obj, response) { } } } + + if (statusCode === 204 || statusCode === 304 || (statusCode >= 100 && statusCode <= 199)) { + // RFC 2616, 10.2.5: + // The 204 response MUST NOT include a message-body, and thus is always + // terminated by the first empty line after the header fields. + // RFC 2616, 10.3.5: + // The 304 response MUST NOT contain a message-body, and thus is always + // terminated by the first empty line after the header fields. + // RFC 2616, 10.1 Informational 1xx: + // This class of status code indicates a provisional response, + // consisting only of the Status-Line and optional headers, and is + // terminated by an empty line. + response._hasBody = false; + } } /** diff --git a/src/js/out/modules/node/http.js b/src/js/out/modules/node/http.js index d0937a945..cc9092518 100644 --- a/src/js/out/modules/node/http.js +++ b/src/js/out/modules/node/http.js @@ -99,6 +99,8 @@ var _writeHead = function(statusCode, reason, obj, response) { response.setHeader(k, obj[k]); } } + if (statusCode === 204 || statusCode === 304 || statusCode >= 100 && statusCode <= 199) + response._hasBody = !1; }; function request(url, options, cb) { return new ClientRequest(url, options, cb); @@ -631,7 +633,8 @@ var OriginalWriteHeadFn, OriginalImplicitHeadFn; class ServerResponse extends Writable { constructor({ req, reply }) { super(); - this.req = req, this._reply = reply, this.sendDate = !0, this.statusCode = 200, this.headersSent = !1, this.statusMessage = void 0, this.#controller = void 0, this.#firstWrite = void 0, this._writableState.decodeStrings = !1, this.#deferred = void 0; + if (this.req = req, this._reply = reply, this.sendDate = !0, this.statusCode = 200, this.headersSent = !1, this.statusMessage = void 0, this.#controller = void 0, this.#firstWrite = void 0, this._writableState.decodeStrings = !1, this.#deferred = void 0, req.method === "HEAD") + this._hasBody = !1; } req; _reply; @@ -646,6 +649,7 @@ class ServerResponse extends Writable { _defaultKeepAlive = !1; _removedConnection = !1; _removedContLen = !1; + _hasBody = !0; #deferred = void 0; #finished = !1; _implicitHeader() { -- cgit v1.2.3