昨天测试一个接口的时候发现一个异常,浏览器访问一个controller,然后带了一个JSON格式的参数,然后浏览器返回400错误,调试发现下面的错误信息:
纯文本文件的字符编码未声明。如果该文件包含 US-ASCII 范围之外的字符,该文件将在某些浏览器配置中呈现为乱码。该文件的字符编码需要在传输协议层声明,或者在文件中加入一个 BOM(字节顺序标记)。
很纳闷,这个服务的部署环境是window10系统,之前在centos7测试是没有这样的问题。
搜索发现都是说在访问页面的开头加上下面的语句:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang = "zh-CN">
并在<head>下面加上下面的语句:
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> ... ... ... </head>
但实际上我是直接通过浏览器访问,无法添加任何有关字符编码等申明的。后来有同事提醒说在使用GET传输JSON格式的‘{}’【大括号】应该会被浏览器拦截,需要转义。恍然大悟,于是把 {} 去除完全可以访问,问题定位了。
最后的解决办法是把 {} 转义成 %7B%7D 即解决上述问题。