日常开发中经常遇到一些莫名其妙的小问题,例如即将上线的项目在线上异常报错,但是在本地确可以正常运行。
但通过IE来访问的话,往往这猝不及防的小惊喜,真是让我们猿猿欲哭无泪啊。
这里简单总结一下在IE浏览器上遇到的一个小坑,之前就因为这个小坑,着实慌了一把。
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986,
这句话的大致意思就是说请求头中包含了 RFC 7230 and RFC 3986规范中定义的非法字符。在这种情况下就会导致页面报400异常。
解决方法:
var _url=path+"/dmaction/getGsList?jsr="+jsr+"&&v=1";_url=encodeURI(encodeURI(_url));$.ajax({type : "Post",url : _url,sync: false,//同步上传cache: false,//上传文件无需缓存processData: false, // 不处理数据contentType: false, // 不设置内容类型dataType : "json",success : function(data) {}});
_url=encodeURI(encodeURI(_url)); 进行编码操作
在Controller中进行解码操作。
@RequestMapping("/getGsList")@ResponseBodypublic List<StudentBean> getGsList(HttpServletRequest request, @RequestParam String jsr)throws Exception{//解决IE浏览器中文 RFC 7230 and RFC 3986jsr=URLDecoder.decode(jsr,"UTF-8");
}
这样,无论在IE、极速浏览器中,都不用担心在报此错误了。