Title: HTTP module does not allow sending all valid header values · Issue #61582 · nodejs/node · GitHub
Open Graph Title: HTTP module does not allow sending all valid header values · Issue #61582 · nodejs/node
X Title: HTTP module does not allow sending all valid header values · Issue #61582 · nodejs/node
Description: Version v25.5.0 Platform Microsoft Windows NT 10.0.26200.0 x64 Subsystem http What steps will reproduce the bug? const http = require("http"); // 0x01 is allowed per the Fetch spec (only 0x00, 0x0A, 0x0D are forbidden) // https://fetch.s...
Open Graph Description: Version v25.5.0 Platform Microsoft Windows NT 10.0.26200.0 x64 Subsystem http What steps will reproduce the bug? const http = require("http"); // 0x01 is allowed per the Fetch spec (only 0x00, 0x0A...
X Description: Version v25.5.0 Platform Microsoft Windows NT 10.0.26200.0 x64 Subsystem http What steps will reproduce the bug? const http = require("http"); // 0x01 is allowed per the Fetch spec (only ...
Opengraph URL: https://github.com/nodejs/node/issues/61582
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"HTTP module does not allow sending all valid header values","articleBody":"### Version\n\nv25.5.0\n\n### Platform\n\n```text\nMicrosoft Windows NT 10.0.26200.0 x64\n```\n\n### Subsystem\n\nhttp\n\n### What steps will reproduce the bug?\n\n```js\nconst http = require(\"http\");\n\n// 0x01 is allowed per the Fetch spec (only 0x00, 0x0A, 0x0D are forbidden)\n// https://fetch.spec.whatwg.org/#header-value\nhttp.request({\n hostname: \"localhost\",\n port: 1,\n headers: { \"X-Test\": \"\\x01\" }\n}); // throws ERR_INVALID_CHAR\n```\n\n### How often does it reproduce? Is there a required condition?\n\nAlways\n\n### What is the expected behavior? Why is that the expected behavior?\n\nHeader value validation should be performed according to:\n\n- https://fetch.spec.whatwg.org/#header-value\n- https://httpwg.org/specs/rfc9110.html#fields.values\n\nThe latter gives a more restrictive ABNF, but per the change in https://github.com/httpwg/http-core/commit/f594c2f65becfff5cf505abdf493e7dcacf8ef00 relaxes the actual strict validation rules to\n\n\u003e a field value MUST either reject the message or replace each of those characters with SP before further processing or forwarding of that message. Field values containing other CTL characters are also invalid; however, recipients MAY retain such characters for the sake of robustness when they appear within a safe context (e.g., an application-specific quoted string that will not be processed by any downstream HTTP parser).\n\n### What do you see instead?\n\nERR_INVALID_CHAR\n\n### Additional information\n\nThis also affects undici/fetch, and prevents the following web platform test from passing:\n\nhttps://github.com/web-platform-tests/wpt/blob/master/fetch/api/headers/header-values.any.js\n\nBrowsers pass this; you can confirm with\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003cscript\u003e\nconst xhr = new XMLHttpRequest();\nxhr.open(\"GET\", \"/\");\nxhr.setRequestHeader(\"X-Test\", \"\\x01\");\nxhr.send();\n\nfetch(\"/\", { headers: { \"X-Test\": \"\\x01\" } });\n\u003c/script\u003e\n```\n\nand seeing that the headers do get sent over the network.\n\nIt would be fine if this functionality was off-by-default, but was in place for those wanting to write spec-compliant libraries (like jsdom).","author":{"url":"https://github.com/domenic","@type":"Person","name":"domenic"},"datePublished":"2026-01-30T03:58:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/61582/node/issues/61582"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1729a590-2239-24ec-bef2-e8c65d05623f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B7B0:1CB5C6:14E08F3:1C568C9:6A4D77ED |
| html-safe-nonce | 55a10650fdd2ee4b4fa46f40b16ac3109fdd22d53ad8de0055d5fc23c040a9f5 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCN0IwOjFDQjVDNjoxNEUwOEYzOjFDNTY4Qzk6NkE0RDc3RUQiLCJ2aXNpdG9yX2lkIjoiNjc1NjY3MjcyMDI1Mzg0MzQzNyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | ff6a49e0fb188e1b1ac4074f2ae5b3897cf986efa605fb1679ffbfdaf098b21c |
| hovercard-subject-tag | issue:3873759203 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/61582/issue_layout |
| twitter:image | https://opengraph.githubassets.com/19b9be76b9c632495c242451bdd79cd4c6f6f955257cc8b7b88f483c1343e9ab/nodejs/node/issues/61582 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/19b9be76b9c632495c242451bdd79cd4c6f6f955257cc8b7b88f483c1343e9ab/nodejs/node/issues/61582 |
| og:image:alt | Version v25.5.0 Platform Microsoft Windows NT 10.0.26200.0 x64 Subsystem http What steps will reproduce the bug? const http = require("http"); // 0x01 is allowed per the Fetch spec (only 0x00, 0x0A... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | domenic |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7f8e15305e2ab58890ca84b830615e375f5df303cf471cafcba0c08272981be3 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 8608b0750fc35e283e5ec5b094bff942d7a0e197 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width