Nginx url含反斜杠404解决方案

项目背景:前端用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"); // 这个代码可以忽略大小写,替换所有字符串


 

 

 

后端修改:

后端使用decode二次解码:%252f第一次解码后为%2f,再将%2f解码为 /

 

demo:

@ApiOperation(value = "testKey")

@ApiImplicitParams({

        @ApiImplicitParam(name = "key",value = "key",required = true)

})

@GetMapping(value = "/{key}/test")

@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 "";

 

}

 

posted @ 2021-08-09 11:01  liuyong0076  阅读(1023)  评论(0编辑  收藏  举报