From 1e030ae2a4b93927c7a1a423515bc105e92172fe Mon Sep 17 00:00:00 2001 From: Derrick Farris Date: Thu, 2 Mar 2023 18:15:17 -0600 Subject: fix(node:http): match Node headers casing (lowercase only) --- src/bun.js/http.exports.js | 8 ++++++-- test/bun.js/node-http.test.ts | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/bun.js/http.exports.js b/src/bun.js/http.exports.js index d21f768d4..36cfeb086 100644 --- a/src/bun.js/http.exports.js +++ b/src/bun.js/http.exports.js @@ -308,13 +308,17 @@ export class Server extends EventEmitter { function assignHeaders(object, req) { var headers = req.headers.toJSON(); + var lowerHeaders = {}; const rawHeaders = newArrayWithSize(req.headers.count * 2); var i = 0; for (const key in headers) { rawHeaders[i++] = key; - rawHeaders[i++] = headers[key]; + var header = headers[key]; + + rawHeaders[i++] = header; + lowerHeaders[key.toLowerCase()] = header; } - object.headers = headers; + object.headers = lowerHeaders; object.rawHeaders = rawHeaders; } function destroyBodyStreamNT(bodyStream) { diff --git a/test/bun.js/node-http.test.ts b/test/bun.js/node-http.test.ts index 7818fba62..c6d44f47d 100644 --- a/test/bun.js/node-http.test.ts +++ b/test/bun.js/node-http.test.ts @@ -411,6 +411,15 @@ describe("node:http", () => { req.end(); } }); + + it("should allow us to access headers on response object in lower-case", done => { + const req = request(`http://localhost:${serverPort}`, { method: "POST" }, res => { + expect(res.rawHeaders.indexOf("Content-Type")).toBeTruthy(); + expect(res.headers["content-type"]).toBe("text/plain"); + done(); + }); + req.end(); + }); }); describe("signal", () => { -- cgit v1.2.3