项目背景:
前端用VUE框架请求数据,后端用java spring boot开发。前后端参数传递取数据的时候,有一个参数内容中包含了反斜杠,对该参数进行了编码解码后,本地调试前端系统能正常拿到数据,但是部署到nginx服务器,进入生产环境,就拿不到数据了。
问题原因:
url中传输的数据包含反斜杠时,nginx会将数据分割,误认为反斜杠是url的分隔符
解决思路:
前端二次编码+后端二次解码
前端修改:
前端使用encode编码后将%2f替换为%252f
var str = encodeURIComponent(pointid);
str = str.replace('%2F', '%252f'); // 注意这个代码只会替换第一个字符串
str = str.replace(/%2f/gi,"%252F"); // 这个代码可以忽略大小写,替换所有字符串
@ResponseBody
public
String selectBykey(@PathVariable("key") String key)
throws
IOException {
System.out.println(key);
String result
= URLDecoder.decode(key,"UTF-8"
);
System.out.println(result);
if
("1"
.equals(result)){
System.out.println(key);
return
"111"
;
}
else
if
(result.equals("1/2"
)){
System.out.println(
"1/2"
);
return
"1111xiegang2"
;
return
""
;