...
发现访问的时候提示“HTTP Status 400 -错误的请求”,不传参打开是正常访问的,这个是为什么?
解决方案
经验证发现是由于tomcat中间件的问题导致,这应该是一个比较普通存在的问题。 经验证发现是由于tomcat中间件的问题导致,这是Tomcat较新版本默认开启的限制。
一、Tomcat出现版本
7.0.69+
8.0.39+
8.5.7+
...
最优解决方案:对于所有服务器传参带特殊符号或者中文的时候必须使用encodeURLComponent 进行编码(在java中对应为 java.net.URLEncoder.encode("...","UTF-8"),但实际中因为不同应用服务器编码不同,有可能使用encodeURLComponent 编码后服务器认为还是存在非法字符,这时候URL传参依然是不生效的,因此是不建议在URL中使用中文,对于带中文的传参建议使用post方式(具体可参考: post方式传参.html)或者Base64编码后传递paramsInfoBase64,具体可参考:)或者Base64编码后传递paramsInfoBase64,具体可参考:《从第三方系统中打开Smartbi资源 此文档中的 》 此文档中的 3、附件参数 部分:
补充方案:以下方案在部分版本Tomcat可以解决URL带中文和特殊字符传参的问题,如果添加后没有解决,就是这个Tomcat版本不支持这样的方式,请使用【最优解决方案所提供的建议】:
...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" relaxedPathChars="|{}[]," relaxedQueryChars="|{}[],"/>
注:ie 访问出现400的问题说明
在Tomcat的较高版本,修改了上述3项配置后,使用ie浏览器直接在地址栏输入未经过在Tomcat的较高版本,修改了上述补充方案3项配置后,使用ie浏览器直接在地址栏输入未经过encodeURI的带参数地址,如
仍然会报出400错误,但使用谷歌火狐浏览器则正常,此问题原因参考:https://blog.csdn.net/Mr_JGuo/article/details/109994643
解决方案:解决方案参考:
1、js编码encodeURI(encodeURI(URL)),对于上述地址,编码后的url为:
http://localhost:8080/smartbi/vision/openresource.jsp?paramsInfo=[{%22name%22:%22%E4%BA%A7%E5%93%81%E5%90%8D%E7%A7%B0%E5%8F%82%E6%95%B0%22,
%22value%22:%22%E6%B1%BD%E6%B0%B4%22,%22displayValue%22:%22%E6%B1%BD%E6%B0%B4%22}]&resid=I4028812115561f6c0144956d0aa20117
&showtoolbar=true&refresh=true&user=admin&password=admin2、对于参数中没有中文参数名、参数显示值和真实值都没有中文的情况,可以将链接中的双引号改为单引号,但前提条件是不能有任何中文出现在url中:如:
2、对于参数中有中文参数名的情况,可以使用以下函数装将中文转成unicode处理
function isChinese(s){
return /[\u4e00-\u9fa5]/.test(s);
}
function chinese2Unicode(str){
if(!str){
return;
}
var unicode = '';
for (var i = 0; i < str.length; i++) {
var temp = str.charAt(i);
if(isChinese(temp)){
unicode += '\\u' + temp.charCodeAt(0).toString(16);
} else{
unicode += temp;
}
}
return unicode;
}
然后再使用encodeURIComponent处理,处理后结果如下http://localhost:8080/smartbi/vision/openresource.jsp?paramsInfo=[{'name':'catalogName','value':'111','displayValue':'111'}]&resid=I4028812115561f6c0144956d0aa20117&showtoolbar=true&refresh=true&user=admin&password=adminresid=I8a8a8c1301759168916803af01759210a68805f3¶msInfo=%5B%7B%22name%22%3A%22input%22%2C%22value%22%3A%22%5Cu996e%5Cu6599%22%2C%22displayValue%22%3A%22%5Cu996e%5Cu6599%22%7D%5D
Viewtracker |
---|