今天下班,为了解决 2 个问题,升级自己的博客网站:
先说一下,我做页面静态化的思路:
服务器上的 web 容器用的是 tomcat 8
我在本地代码提交和测试好了,以为在服务器执行一下更新部署的脚本,结果开心的事情发生了:静态页面没有生成出来。
看了一眼日志:
Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
这一看就知道是参数出问题了,网上查解决办法:意思都是说 GET 请求不支持 RFC 7230 and RFC 3986 规定外的字符,但是解决办法都不靠谱。
既然是参数问题,就想到了对参数进行编码:
URLEncoder.encode(typeIdAndName, "utf-8")
把 tomcat 的 server.xml 的字符集改成 utf-8,猜想 tomcat 肯定会自行解码参数,并没有对 controller 的参数进行解码,测一下成功了。
这个问题花了我不少时间排查,因为我本地用的 tomcat7 并不存在这个问题,所以被坑得血淋淋的。
Request For Comments(RFC),是一系列以编号排定的文件。RFC 文件是由 Internet Society(ISOC)赞助发行。几乎所有的互联网通信协议都有在RFC文件内详细说明。
附上 RFC 7230 and RFC 3986 源文件,有兴趣可以研究一下:
Controller 使用 HttpServletResponse 直接输出 markdown 格式的文本中包含中文乱码
因为文章的中文并无乱码,所以猜想肯定是浏览器解析和显示的问题,于是给 HttpServletResponse 设置好 ContentType 应该就好了
resp.setContentType("application/json;charset=UTF-8");
问题搞完,已经 23 点多,公司只有我一个人了,真没想到还会出这幺蛾子,酸爽......
ConstXiong 备案号:苏ICP备16009629号-3