Postman GET请求传%参数绕过正则校验返回正常响应问题
问题原因
不是Postman主动删除了参数中的%字符,该异常是URL百分号编码规则导致的:
- 按照URL传输规范,
%是专门的转义标识字符,不能直接作为参数值裸传,必须编码为%25才能被识别为字面量的%符号。 - 你传入的连续
%%%%%%%属于非法百分号编码序列(合法的%转义要求%后必须跟2位十六进制字符),Postman内置的HTTP请求引擎、后端Web容器在解析URL参数时,会自动忽略无法正常解码的非法转义片段,最终后端拿到的unitCode参数值就是空字符串。 - 你配置的校验正则
^[a-zA-Z0-9]{0,2}$本身允许长度为0的空字符串通过校验,因此没有触发400 Bad Request拦截,最终返回了正常响应。
验证方式
可以通过两个简单测试快速确认逻辑:
- 将参数值替换为合法编码后的
%25%25%25再发起请求,后端会接收到字面量%%%,此时会因为参数长度超限、包含非字母数字字符,正常触发400拦截。 - 临时把正则调整为
^[a-zA-Z0-9]{1,2}$(将参数最小长度限制从0改为1),再传入原始的%%%%%%%参数,会因为后端拿到空值不符合规则,直接返回400错误。
修复方案
- 调整参数校验规则:如果业务上
unitCode不允许为空,直接把正则的长度下限改为要求的最小长度,从规则层面堵上空值绕过校验的入口。 - 兼容空值场景:如果业务确实允许
unitCode传空,需要额外增加校验逻辑,识别原始请求中unitCode参数后存在非法编码序列的场景,直接返回参数格式错误。 - 规范Postman传参方式:需要传包含
%在内的特殊字符时,不要直接把参数拼到URL地址栏,填写到Postman的Params面板的键值对输入区域,Postman会自动完成合规的URL编码,避免出现非法转义序列解析异常。
内容的提问来源于stack exchange,提问作者Komal Tripathi
相关产品推荐
相关产品推荐

