Web程序在Tomcat8.5运行,使用IE访问中文URL时报400错误?
现有一个Web程序原先使用tomcat7运行时一切正常,刚刚升级到tomcat8.5.83后有个别程序在IE中报400错误。
这个报错的程序是在前端通过layer.open弹出窗口,请求地址中包含中文。
错误日志:
HTTP状态 400 - 错误的请求类型 异常报告
消息 在请求目标中找到无效字符[*** ]。有效字符在RFC 7230和RFC 3986中定义
描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
测试以后发现以下情况:
- 错误只在IE中出现,火狐、谷歌都正常运行。
- 只有在URL包含中文时报错,删除中文后正常运行。
- 将tomcat版本改回7时正常运行。
尝试过但是无效的方案:
- 设置relaxedPathChars、relaxedQueryChars
- 设置URIEconding、useBodyEncodingForURI
- 设置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