根本原因是Postman根据Body类型自动同步Content-Type等头字段,而非覆盖;需先设Body为none再填Header,或用Pre-request Script的upsert()强制设置。

Postman 手动设置的 Header 被自动加的默认 Header 覆盖,根本原因不是“覆盖”,而是你没删干净、没关对地方,或者误用了只读副本。关键在于:Postman 的默认 Header(如 User-Agent、Content-Type、Accept)只在你**完全未设置该字段时才自动注入**;一旦你在 Headers 面板里显式写了,它就不会再自动加——但前提是,那个显式写的值真的生效了。
为什么手动填的 Content-Type 一发请求就变回 application/json?
这是最常踩的坑:你以为在 Headers 面板里填了 Content-Type: application/x-www-form-urlencoded,但 Postman 在发送前又根据 Body 类型(比如选了 form-data)偷偷重写了它。这不是覆盖,是 Body 类型驱动的自动同步行为。
- Body 选
raw且格式为 JSON → Postman 自动设Content-Type: application/json,无视 Headers 面板里的同名项 - Body 选
form-data或x-www-form-urlencoded→ 自动设对应Content-Type,Headers 面板里填的会被忽略 - Body 选
none或binary→ Headers 面板里的Content-Type才真正生效
解决办法:先切 Body 类型为 none,手动在 Headers 面板填好所有头,再切回需要的 Body 类型(此时 Postman 不会再改 Content-Type);或者直接用 Pre-request Script 强制写死:pm.request.headers.upsert({key: "Content-Type", value: "application/x-www-form-urlencoded"});
pm.request.headers.add() 和 upsert() 的区别与风险
Pre-request Script 里用 add() 是危险操作:它不检查是否已存在,重复执行会导致同名 Header 出现多次(比如两个 Authorization),后端直接返回 400。而 upsert() 会先删再加,看似安全,但它会无差别删除所有同名 Header —— 包括你从环境变量或集合变量里继承来的、本不该动的系统头。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 想安全更新
X-Request-ID?先用pm.request.headers.remove("X-Request-ID")显式删掉旧的,再add()新的 - 想保留原有
Accept但只对特定域名加X-Trace-ID?得先用pm.request.url.host判断域名,再条件化操作 - 别对
User-Agent或Content-Length用upsert()—— 后者由 Postman 自动计算,手设错会触发 400 或连接中断
如何确认最终发出的 Header 到底长什么样?
Headers 面板显示的不是真实发出的内容,它只是你的编辑区。真实发出的 Header 只能在两个地方验证:
- 点击 Headers 面板右上角那个小眼睛图标(?️),它会展开“Actual headers sent”,这里列的是最终打包进 TCP 包的全部头,包括自动加的和你手动写的
- 用
console.log(pm.request.headers.toJSON())在 Pre-request Script 里打印,但注意:这打印的是脚本执行后的状态,不包含 Postman 后续自动补的(比如Content-Length)
如果发现 Actual headers sent 里有你不想要的 Cache-Control: no-cache,那说明你没关掉 Settings 里的 Send no-cache header 开关;如果是多余的 Postman-Token,就去 Settings 关掉 Send PostmanToken header。
真正难处理的不是怎么加 Header,而是怎么让 Postman 别自作主张——它总在你没注意的地方悄悄补、悄悄换、悄悄删。每次调不通,先看小眼睛图标里的 Actual headers,再回头检查 Body 类型和 Settings 开关,比反复改脚本快得多。









