From 278041d8cce5d96911bb1333f77dca3567fc90e2 Mon Sep 17 00:00:00 2001 From: Ravi <13908473+rkdfx@users.noreply.github.com> Date: Sat, 23 May 2026 00:03:18 +0530 Subject: [PATCH] fix(headers): silently skip empty header names instead of throwing (#10875) * fix(headers): silently skip empty header names instead of throwing Signed-off-by: Ravi <13908473+rkdfx@users.noreply.github.com> * chore: add suggested test headers length assert Signed-off-by: Ravi <13908473+rkdfx@users.noreply.github.com> * test(headers): cover whitespace-only header names --------- Signed-off-by: Ravi <13908473+rkdfx@users.noreply.github.com> Co-authored-by: Jay --- PRE_RELEASE_CHANGELOG.md | 1 + lib/core/AxiosHeaders.js | 2 +- tests/unit/axiosHeaders.test.js | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/PRE_RELEASE_CHANGELOG.md b/PRE_RELEASE_CHANGELOG.md index 3af9f649..b182213a 100644 --- a/PRE_RELEASE_CHANGELOG.md +++ b/PRE_RELEASE_CHANGELOG.md @@ -8,6 +8,7 @@ ## Bug Fixes +- **AxiosHeaders:** Silently skip empty response header names emitted by some React Native Android responses instead of throwing. (**#6959**, **#10875**) - **Request Data:** Preserve enumerable symbol keys when merging plain request data before `transformRequest`. (**#6392**) ## Release Documentation TODO diff --git a/lib/core/AxiosHeaders.js b/lib/core/AxiosHeaders.js index 235b6f79..551f5994 100644 --- a/lib/core/AxiosHeaders.js +++ b/lib/core/AxiosHeaders.js @@ -89,7 +89,7 @@ class AxiosHeaders { const lHeader = normalizeHeader(_header); if (!lHeader) { - throw new Error('header name must be a non-empty string'); + return; } const key = utils.findKey(self, lHeader); diff --git a/tests/unit/axiosHeaders.test.js b/tests/unit/axiosHeaders.test.js index 14821e30..62a8ed43 100644 --- a/tests/unit/axiosHeaders.test.js +++ b/tests/unit/axiosHeaders.test.js @@ -146,6 +146,29 @@ describe('AxiosHeaders', () => { assert.strictEqual(headers.get('x-name'), '请求Injected: true用户'); }); + + // Regression: https://github.com/axios/axios/issues/6959 + it('should silently skip empty header names', () => { + const headers = new AxiosHeaders(); + + assert.doesNotThrow(() => headers.set('', 'a')); + assert.doesNotThrow(() => headers.set(' ', 'b')); + assert.doesNotThrow(() => headers.set({ '': 'c', ' ': 'd', foo: 'bar' })); + assert.doesNotThrow(() => + headers.set( + new Map([ + ['', 'e'], + [' ', 'f'], + ['x', 'y'], + ]) + ) + ); + + assert.strictEqual(headers.has(''), false); + assert.strictEqual(headers.get('foo'), 'bar'); + assert.strictEqual(headers.get('x'), 'y'); + assert.strictEqual(Object.keys(headers).length, 2); + }); }); it('should support uppercase name mapping for names overlapped by class methods', () => {