From a4e80f0111a0b01f1f1dd8eb4a71eb47c8eec629 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Tue, 10 Mar 2026 12:11:17 +0530 Subject: [PATCH] fix: resolve #254 - preserve headers set via writeHead When user calls res.writeHead(200, undefined, {'foo': 'bar'}), compression middleware was overwriting those headers by calling writeHead again without the headers. Check res._header to detect if writeHead was already called. --- index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index c0638e08..24ace65d 100644 --- a/index.js +++ b/index.js @@ -101,7 +101,9 @@ function compression (options) { return false } - if (!headersSent(res)) { + // Don't overwrite headers if already set via writeHead (e.g., with custom statusText) + // Check res._header to detect if writeHead was already called with headers + if (!headersSent(res) && !res._header) { this.writeHead(this.statusCode) } @@ -115,7 +117,9 @@ function compression (options) { return false } - if (!headersSent(res)) { + // Don't overwrite headers if already set via writeHead (e.g., with custom statusText) + // Check res._header to detect if writeHead was already called with headers + if (!headersSent(res) && !res._header) { // estimate the length if (!this.getHeader('Content-Length')) { length = chunkLength(chunk, encoding)