diff options
Diffstat (limited to 'src/js/node/http.ts')
-rw-r--r-- | src/js/node/http.ts | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/js/node/http.ts b/src/js/node/http.ts index 563cb8c46..42388b32e 100644 --- a/src/js/node/http.ts +++ b/src/js/node/http.ts @@ -957,6 +957,7 @@ export class OutgoingMessage extends Writable { } } +let OriginalWriteHeadFn, OriginalImplicitHeadFn; export class ServerResponse extends Writable { declare _writableState: any; @@ -1055,14 +1056,20 @@ export class ServerResponse extends Writable { ); } + #drainHeadersIfObservable() { + if (this._implicitHeader === OriginalImplicitHeadFn && this.writeHead === OriginalWriteHeadFn) { + return; + } + + this._implicitHeader(); + } + _final(callback) { if (!this.headersSent) { var data = this.#firstWrite || ""; this.#firstWrite = undefined; this.#finished = true; - if (this.writeHead !== Object.getPrototypeOf(this).writeHead) { - this._implicitHeader(); - } + this.#drainHeadersIfObservable(); this._reply( new Response(data, { headers: this.#headers, @@ -1181,6 +1188,9 @@ export class ServerResponse extends Writable { } } +OriginalWriteHeadFn = ServerResponse.prototype.writeHead; +OriginalImplicitHeadFn = ServerResponse.prototype._implicitHeader; + export class ClientRequest extends OutgoingMessage { #timeout; #res: IncomingMessage | null = null; |