Postman请求头含换行符(\n或\r\n)会导致HTTP 400错误,因协议禁止头部含控制字符;常见来源为复制粘贴、Shift+Enter软回车或Bulk Edit解析异常;需手动清理末尾不可见字符或用Pre-request Script自动trim。

Postman 请求头里出现换行,基本等于请求发不出去——服务端会直接拒收或返回 400,因为 HTTP 头部字段不允许含 \n 或 \r\n。
Postman Header 编辑框里看不见的 \n 怎么冒出来的
最常见来源是复制粘贴:从 Excel、网页、Notepad++ 或带格式的文档里复制键值对,表面看着是 “Authorization: Bearer abc123”,实际末尾可能藏了不可见的换行或空格;其次是手动按了 Shift+Enter(软回车),在 Postman 的 Header 表格编辑模式下也会悄悄插入 \n;还有人用 Bulk Edit 粘贴时,原始文本里用了 \r\n 分隔多行,Postman 误判为多个 header 条目,但解析失败后残留异常字符。
- 现象:Header 行显示正常,但发送后响应是
400 Bad Request或ERR_INVALID_HTTP_RESPONSE - 验证方法:点击对应 Header 行右侧的 “...” 按钮展开编辑,把光标移到值末尾反复按 ← 方向键——如果光标多停一次,大概率就是隐藏了
\n或\r - 根本原因:HTTP/1.1 协议规定 header 字段值内不能含控制字符,
\n会被解析器当作 header 结束符,导致后续字段错位甚至整个请求头结构崩溃
手动清理 Header 里的隐藏换行和空格
别信“看起来没空格”——必须主动剥离。Postman 没有自动 trim 功能,所有清理都得人工干预。
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
- 选中问题 Header 行 → 点击右侧 “
...” 进入纯文本编辑模式 - 全选值内容(Ctrl+A),复制到记事本(非 Word 或富文本编辑器)再粘贴回来,可清除大部分格式残留
- 重点检查末尾:把光标挪到值最后一个可见字符后,连按几次退格键;若某次退格后光标没移动,说明删掉了一个
\r或\n - 值里有 Base64 或 JWT 时,特别注意结尾的
=后是否多了换行——哪怕只多一个\n,整个 token 就失效
用 Pre-request Script 自动过滤 header 值中的换行
如果 Header 值来自变量(比如 {{auth_token}}),且源头数据本身带换行,靠手动清不现实,得在发出前做标准化处理。
- 在请求的
Pre-request Script标签页里写:
pm.request.headers.each(header => {
if (header.key === 'Authorization') {
header.value = header.value.replace(/[\r\n\s]+$/g, '').trim();
}
});
- 这段脚本只对
Authorization头生效,去掉值末尾所有空白、\r、\n,再 trim 全局空格 - 若需处理多个 header,把条件改成
['Authorization', 'X-Signature'].includes(header.key) - 注意:脚本无法修复 Bulk Edit 粘贴时已损坏的 header 结构,它只作用于运行时动态生成或变量替换后的值
为什么 Copy-Paste 到 Bulk Edit 容易出问题
Bulk Edit 模式本质是按行解析,每行期望是 “Key: Value”。一旦某行 Value 里含 \n,Postman 就把它当成了两行——第一行 Key 是原字段,第二行 Key 变成空字符串,Value 成了断开的后半截,最终发出去的 header 会漏字段或格式错乱。
- 安全做法:Bulk Edit 粘贴前,先用 VS Code 或 Notepad++ 显示所有空白字符(View → Show Symbol → Show All Characters),确认没有
CR、LF、CRLF - 更稳妥的方式:绕过 Bulk Edit,全部用表格模式一行行手动填,尤其涉及 token、signature 等敏感 header 时
- 临时应急:粘贴后立刻点 “
Key-Value Edit”,Postman 会尝试重解析——但它不会报错,只会静默丢弃解析失败的行,你以为填上了,其实没生效
真正麻烦的不是换行本身,而是它总在你最没防备的时候藏在变量值、剪贴板或脚本输出里;等看到 400 才回头查,往往已经改过三遍 header 还在怀疑是不是后端 bug。
















