- 问题来源:
使用RESTful风格发送带有特殊符号(如:点、大括号等)的请求,当使用Nginx做地址映射时会返回报"HTTP Status
400-Bad Request"的错误,这个时候我们需要对Nginx的映射方式做一下调整。
Nginx调整完发现跳转后又报了同样的错误,是应为SpringBoot也需要做兼容
Nginx
如果请求地址是这种,参数直接跟在路径后面的:http://678910.top/sms/menu/{12345678}
location /sms/menu {
# 原映射方式
# proxy_pass http://system/menu;
# 新的映射方式
if ($request_uri ~* ^/sms/menu/(.*)$) {
proxy_pass http://system/menu/$1;
}
# header信息设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
}
释义:
1. $request_uri表示完整url去除最前面$host剩下的部分,如:http://678910.top/sms/menu/{12345678},去除$host后剩下的部分就是:/sms/menu/{12345678}
2. 匹配正则表达式时,匹配到的值,从左到右分别对应$1、$2、$3、…、、$8、$9,如以上Nginx中匹配的$1 = {12345678}
如果是使用”?“拼接:http://192.168.163.59:8007/approve/loanFile/download?fileName=ZXBH202307121834000201%E5%A4%A7%E5%8D%8E%E5%AE%A1%E5%AD%97[2023]008818(1).pdf
在这里插入代码片
SpringBoot
springBoot 启动类 添加 bean
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory (){
// 修改内置的 tomcat 容器配置
TomcatServletWebServerFactory tomcatServlet = new TomcatServletWebServerFactory();
tomcatServlet .addConnectorCustomizers(
(TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}")
);
return tomcatServlet ;
}