使用Insomnia发送含编码特殊字符的GET请求返回400错误求助
解决URL含特殊字符导致的400 Bad Request问题
服务器安全机制拦截
多数Web服务器(如Apache、Nginx)或WAF(Web应用防火墙)会默认拦截|、<、>这类特殊字符,防止注入类攻击。比如Apache的mod_security模块、Nginx的默认路径字符规则,都会把这些字符判定为非法内容。- 调整方案:
- Apache:在配置文件中添加
AllowEncodedSlashes NoDecode,同时检查mod_security规则,将|、<、>从拦截字符列表中移除; - Nginx:在对应server块中配置
allow_encodedslashes on;,并检查WAF规则是否存在相关拦截策略,按需调整。
- Apache:在配置文件中添加
- 调整方案:
后端框架的路径字符校验
像Spring Boot、Django这类后端框架,默认会对URL路径中的字符做严格校验,非常规字符会直接返回400错误。- 调整方案:
- Spring Boot:在配置文件中添加对应服务器的宽松字符配置,比如Tomcat用
server.tomcat.relaxed-path-chars=|,>,<,Undertow用server.undertow.allowed-chars-in-path=|,>,<; - Django:自定义路由解析逻辑,或者修改框架的URL校验规则,放宽对这类特殊字符的限制。
- Spring Boot:在配置文件中添加对应服务器的宽松字符配置,比如Tomcat用
- 调整方案:
切换到查询参数传递特殊内容
当前你把带特殊字符的内容放在URL路径中,服务器对路径部分的字符限制通常比查询参数更严格。可以尝试将这部分内容移到查询参数里,编码后发送,比如:https://myhost/publication/info?id=11%20%7C%20Friends这种方式大概率能绕过路径字符的校验限制。
内容的提问来源于stack exchange,提问作者M. Schwarz
相关产品推荐
相关产品推荐

