aboutsummaryrefslogtreecommitdiff
path: root/src/js/node/http.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/node/http.ts')
-rw-r--r--src/js/node/http.ts16
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;