Web程序在Tomcat8.5运行,使用IE访问中文URL时报400错误?

现有一个Web程序原先使用tomcat7运行时一切正常,刚刚升级到tomcat8.5.83后有个别程序在IE中报400错误。
这个报错的程序是在前端通过layer.open弹出窗口,请求地址中包含中文。

错误日志:

HTTP状态 400 - 错误的请求

类型 异常报告

消息 在请求目标中找到无效字符[*** ]。有效字符在RFC 7230和RFC 3986中定义

描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

测试以后发现以下情况:

  1. 错误只在IE中出现,火狐、谷歌都正常运行。
  2. 只有在URL包含中文时报错,删除中文后正常运行。
  3. 将tomcat版本改回7时正常运行。

尝试过但是无效的方案:

  1. 设置relaxedPathChars、relaxedQueryChars
  2. 设置URIEconding、useBodyEncodingForURI
  3. 设置org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

花了很多时间和精力都没有解决问题,跪求大神提供解决方案。
非常渴望得到大家的帮助!!!


回答:

layer.open 这应该是个js函数吧. 直接改这个好了, 如果发现地址里有中文(用unicode \u4e00-\x9f85 来判断) 就编码, 再请求.

或者干脆点, 直接修改 window.open , 用自己的给替换掉, 处理同上.

还有就是在页面添加个a标签click事件, 在点击跳转前, 对href的内容进行编码, 也是判断一下中文.

// js 判断中文的正则

/[\u4e00-\u9f85]/.test('中文')


回答:

在前端请求url之前 使用encodeURIComponent() 处理一下url 然后再请求试试呢

以上是 Web程序在Tomcat8.5运行,使用IE访问中文URL时报400错误? 的全部内容, 来源链接: utcz.com/p/944781.html

回到顶部