Pre-request Script 中无法直接删除请求头,只能通过 headers.all() + filter() 重建或用 upsert() 覆盖;headers.clear() 后需 forEach(add) 才生效;Tests 中修改无效,因请求已发出。

Pre-request Script 中无法直接删除请求头
Postman 的 pm.request.headers 对象不提供 remove() 或 delete() 方法,试图用 headers.delete("Authorization") 或 headers.remove("Content-Type") 会报错:TypeError: headers.remove is not a function。这是初学者最常卡住的地方——不是写法不对,而是 API 根本不支持“删”,只能“覆盖”或“过滤重建”。
用 headers.all() + filter() 重建头列表
真正可行的方式是:取出全部头,过滤掉目标项,再用 clear() 清空原列表,最后批量添加新列表。适用于需要动态剔除特定头(比如移除默认 User-Agent 或旧 Authorization)的场景。
例如,在 Pre-request Script 中彻底清除所有 Authorization 头(含多个同名头):
const currentHeaders = pm.request.headers.all(); const filteredHeaders = currentHeaders.filter(h => h.key !== 'Authorization'); pm.request.headers.clear(); filteredHeaders.forEach(h => pm.request.headers.add(h));
注意点:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
-
headers.all()返回的是对象数组,每个元素含key和value字段,区分大小写(authorization≠Authorization) - 必须调用
clear(),否则新旧头会叠加 - 如果只删一个头但保留其他,别漏掉
forEach(add)步骤
用 headers.upsert() 覆盖而非删除
多数情况下,你并不真需要“删除”,而是想“替换值”或“设为空”。这时用 upsert() 更安全、更轻量:
pm.request.headers.upsert({ key: "Authorization", value: "" });
pm.request.headers.upsert({ key: "X-Trace-ID", value: "trace-" + Date.now() });
这个操作会自动覆盖已存在的同名头,不存在则新增。它比重建列表快,且不会误删其他头。适合以下情况:
- 临时禁用认证(设
Authorization为空字符串) - 动态刷新时间戳类头(如
X-Request-Time) - 确保某个头只出现一次,避免重复携带
为什么不能在 Tests 脚本里清理请求头
Tests 脚本运行在响应返回之后,此时请求早已发出,修改 pm.request.headers 完全无效。常见错误是把清理逻辑写在 Tests 里,还纳闷为什么下一次发送还是带着旧头——那是因为头是在发送前就固化了。所有头操作必须放在 Pre-request Script 中,且确保它在请求构造完成、尚未发出的那一刻执行。
容易被忽略的一点:Collection 或 Folder 级别的 Pre-request Script 会作用于其下所有 Request,如果在 Collection 层统一清头,而某个 Request 又手动加了头,顺序上后者会覆盖前者——但如果你依赖“清空后重加”,就必须确保所有头都由脚本控制,不能混用界面手动填写。

















