{"record":{"id":"435b86db6d5c53d3","repo":"denoland/deno","slug":"err-invalid-arg-value-435b86","errorCode":"ERR_INVALID_ARG_VALUE","errorMessage":"The 'headers' argument is invalid. Received ${headers}","messagePattern":"The 'headers' argument is invalid\\. Received (.+?)","errorType":"error_code","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/_http_outgoing.ts","lineNumber":956,"sourceCode":"      if (headers) {\n        if (headers === this[kOutHeaders]) {\n          // kOutHeaders format: { lowercase: [OriginalName, value] }\n          // deno-lint-ignore guard-for-in\n          for (const key in headers) {\n            const entry = headers[key];\n            this._storeHeaderEntry(state, entry[0], entry[1], false);\n          }\n        } else if (ArrayIsArray(headers)) {\n          if (headers.length && ArrayIsArray(headers[0])) {\n            // Array of arrays: [[name, value], ...]\n            for (let i = 0; i < headers.length; i++) {\n              const entry = headers[i];\n              this._storeHeaderEntry(state, entry[0], entry[1], true);\n            }\n          } else {\n            // Flat array: [name, value, name, value, ...]\n            if (headers.length % 2 !== 0) {\n              throw new ERR_INVALID_ARG_VALUE(\"headers\", headers);\n            }\n\n            for (let n = 0; n < headers.length; n += 2) {\n              this._storeHeaderEntry(\n                state,\n                headers[n],\n                headers[n + 1],\n                true,\n              );\n            }\n          }\n        } else {\n          // Plain object: { name: value }\n          const keys = ObjectKeys(headers);\n          for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            this._storeHeaderEntry(state, k, headers[k], true);\n          }","sourceCodeStart":938,"sourceCodeEnd":974,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/_http_outgoing.ts#L938-L974","documentation":"When headers are supplied as a flat array (e.g. to writeHead(status, headers) or http.request options), _storeHeader expects [name, value, name, value, ...] pairs. An odd-length flat array has an orphan element, so it throws ERR_INVALID_ARG_VALUE for the whole 'headers' argument rather than silently dropping or mispairing a header.","triggerScenarios":"res.writeHead(200, ['Content-Type', 'text/html', 'X-Extra']) (3 elements); http.request({ headers: ['accept'] }); any code that builds a flat header array dynamically and loses or adds one element.","commonSituations":"Dynamically constructed header arrays where a push of a name without a value (or a value pushed as two entries) breaks pairing; migrating from object-form headers ({'x': 'y'}) to array-form and missing a member; typos in long header literals.","solutions":["Make the array even-length: every name must be immediately followed by its value.","Prefer object form writeHead(200, { 'content-type': 'text/html' }) or nested pairs [['content-type','text/html']] which the same code path accepts unambiguously.","Validate dynamic arrays before passing: assert headers.length % 2 === 0."],"exampleFix":"// before\nres.writeHead(200, ['Content-Type', 'text/html', 'X-Extra']); // odd length\n\n// after\nres.writeHead(200, { 'Content-Type': 'text/html' });\n// or pairs: [['Content-Type', 'text/html'], ['X-Extra', 'value']]","handlingStrategy":"validation","validationCode":"function toHeaderPairs(headers) {\n  if (!Array.isArray(headers)) return headers;\n  if (headers.length % 2 !== 0) {\n    throw new Error(`headers array must be even-length [name, value, ...]; got ${headers.length}`);\n  }\n  return headers;\n}","typeGuard":"function isFlatHeaderArray(h) {\n  return Array.isArray(h) && !(h.length && Array.isArray(h[0]));\n}\n// even-length flat arrays and [[name, value]] pairs are both accepted by writeHead","tryCatchPattern":null,"preventionTips":["Prefer object form for static headers: writeHead(200, { 'content-type': 'text/html' }).","Add a build-time unit test asserting dynamic header arrays have even length.","Use pairs-of-pairs ([['n','v']]) when names or values may contain commas."],"tags":["http","node-compat","headers","argument-validation"],"backgroundTag":"invalid-headers-argument","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}