应使用encodeURIComponent对Header值编码,因HTTP头部仅允许ASCII字符,中文及全角符号(如“”、:)等非法字符会导致Invalid character in header content错误。

Postman请求头值含中文或全角符号怎么办
HTTP头部字段只接受ASCII字符(RFC 7230),中文、全角引号(如“”)、中文冒号、空格、换行符等都会触发Invalid character in header content错误。
常见出错位置:Authorization、sessionId、X-User-Name这类自定义头,尤其在手动粘贴或从JSON响应中复制值时容易带入全角字符。
- 打开Postman的Headers标签页,逐个检查值字段:用光标左右移动,看是否卡顿(可能有不可见空格);选中整个值,按Delete再重输一遍
- 若值含中文(如
Authorization: Bearer 小明),必须先用encodeURIComponent()编码,变成类似Bearer %E5%B0%8F%E6%98%8E - 全角双引号
“abc”、全角冒号key:value必须替换为ASCII版本"abc"和key:value - 避免从微信、Word、Notepad++等富文本环境直接复制——改用记事本中转一次可清除隐藏格式
Authorization头报错时Basic/Bearer格式是否合规
这个错误常被误判为“编码问题”,实际更多是格式拼写错误。Postman不会自动校验Authorization头内容合法性,只原样转发。
-
Basic认证:值必须是base64(username:password),不能手输明文,也不能漏掉Basic前缀(注意后面有个空格) -
Bearer认证:token本身不能含空格、换行、未编码的特殊字符;若token来自登录接口响应,请确认服务端返回的是干净字符串,而非包裹在JSON里(如{"token":"xxx"}) - 不要在Postman里手动拼接
Authorization: Bearer ${token}后直接发送——先在Tests脚本里用pm.environment.set("auth", "Bearer " + token),再在Headers中引用{{auth}}
sessionId等业务头含非法字符的快速清洗法
业务系统生成的sessionId、X-Trace-ID等字段,有时会混入下划线以外的符号(如@、#、[),或被日志系统注入控制字符。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 在Postman Pre-request Script中加一行清洗逻辑:
const rawId = pm.environment.get("sessionId"); const cleanId = rawId?.replace(/[^a-zA-Z0-9_\-\.]/g, ""); pm.environment.set("sessionId", cleanId); - 若值来自响应提取(如JSONPath
$.data.sessionId),请确认原始响应体无BOM头、无UTF-8变长编码错误——可在Postman Console里点开Response → Raw查看十六进制流,搜索EF BB BF(BOM)或00(空字节) - 临时验证:把
sessionId值粘贴到https://www.urlencoder.org/做URL编码,再填回Header,能绕过大部分非法字符限制(但服务端需对应解码)
Tomcat或Nginx侧报错Invalid character in request target怎么办
如果错误信息明确含request target(不是header content),说明问题出在URL路径或查询参数,比如用了[]、{}、|等RFC 3986未保留字符。
- Tomcat用户:编辑
conf/server.xml,在节点添加:relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%" - Nginx用户:在
location块中加underscores_in_headers on;(仅针对下划线),但更稳妥的是让前端对路径参数做encodeURIComponent(),服务端再解码 - Postman里不要手动构造含
/user/[1,2,3]这种路径——改用Params标签页填ids=1,2,3,由Postman自动编码
最易被忽略的一点:Postman的Environment变量编辑框支持多行输入,但粘贴进来的值末尾可能带换行符,而这个换行符在Headers中不可见,却足以触发报错。每次修改环境变量后,建议在Console里执行console.log(JSON.stringify(pm.environment.get("sessionId")))确认是否含\n或\r。










