url带参数请求的坑

最近因为一个请求转发的问题搞了好几天,原来是url带参数的问题

当我们使用url带参数请求接口时,如果参数的值包含了一些特殊字符,

服务器接收到的值将会发生变化,如包含+、空格等

如:http://xxx.yyy.com?aa=tt+ddd

服务器端接收到的aa的值将变成tt ddd,其中+将变成空格了

有些人认为url带参数的方式只有在浏览器中访问时才会转义,

其实在不使用浏览器,使用java进行http的调用,url中的参数照样会进行转义,

一旦进行转义,那么得到的值肯定就错误了

比如base64编码后的参数多半带有+,这种情况使用url带参数进行访问,服务器端得到的

base64的值必定是错误的!

想解决这种问题,也是有办法的,主要有两种方式,

1.对url的参数进行编码,服务端对参数进行解码

如js的编码encodeURIComponent,decodeURIComponent解码

2.不要将参数放在url中,将参数放在body中,使用post进行提交

post提交的参数可以避免特殊字符转义的问题

所以,最安全的做法就是,不要使用url带参数的方式进行请求接口!

举报
评论 0