IE11 400错误,谷歌、火狐正常显示(中文参数导致)

 

今天发现个问题,做的项目在谷歌、火狐、edge上正常显示及跳转,但IE11上就会报下面几个错:

1:400错误

2:HTML5 DOCTYPE 无效 <!DOCTYPE >错误

3:dom-DOM7011:禁用了反向和正向缓存

搜索了这3个错误,发现2.3都不符合我的报错原因,

然后参考《Ie浏览器请求400错误,谷歌火狐等浏览器正常请求》https://blog.csdn.net/guanfengliang1988/article/details/73321358/这篇帖子,对项目进行修改,解决了问题。

此处引用原文:

location.href="请求的url"在其它浏览器上是可以正常请求的.但是在ie浏览器上确出现奇怪的http请求400错误,我们先来对于http400状态的描述:当用户在打开网页时,返回给用户界面带有400提示符的页面。其含义是你访问的页面域名不存在或者请求错误,自己的本地,肯定没问题.那就是请求错误了.几经尝试发现是参数带中文的会出现此种情况,没带中文的没有问题.

解决方法:

      1.js编码encodeURI(encodeURI(URL)),编码两次
      2.
服务器端解码 URLDecoder.decode(request.getParameter("para"),"UTF-8")

在我的JS里,只将会出现中文的参数,进行了编码:


 
 
  1. window.location.href
  2. = "index?code="+Id+"&name="+encodeURI(encodeURI(name))+"&begDate="+begDate+"&endDate="+endDate;

 
 
  1. controller层:
  2. @RequestMapping("/index")
  3. public ModelAndView index(HttpServletRequest request,HttpServletResponse response) {
  4. String name = request.getParameter("name");
  5. if (null != name){
  6. try {
  7. name = URLDecoder.decode(request.getParameter("name"),"UTF-8");
  8. } catch (UnsupportedEncodingException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12. }

name传参在地址栏显示的是加密过的:%25E6%2596%25B0%25E7%2596%2586%25E5%2585%25AC%25E5%258F%25B8 如这段,经过URLDecoder.decode解密,可得中文参数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值