升级版本
目前使用版本:Tomcat9.0.37
升级版本:Tomcat9.0.45
升级后现象
IE浏览器下面出现白屏,静态资源(css、js等)全部出现400错误,刷新页面也一样,但是禁用浏览器缓存问题就消失了。
其他浏览器在第一次访问的时候也有类似现象,但是刷新页面就好了。
问题排查
对比请求
IE浏览器下开启和关闭缓存现象不一样,只有在开启缓存的时候才出现400问题。
缓存关闭请求:
缓存开启请求:
发现开启缓存之后多了两个Header:If-Modified-Since和If-None-Match
问题搜索
搜索类似现象,发现是再做Xss跨站攻击转义的时候对header做了转义引起。
https://bz.apache.org/bugzilla/show_bug.cgi?id=64816
但是在9.0.37以前版本是正常的
最终问题原因
Tomcat9.0.38版本对If-None-Match和If-Match头信息做了强校验,格式要求严格,错误的格式都返回400错误。
Tomcat源码:org.apache.catalina.servlets.DefaultServlet#checkIfMatch
问题解决
在做Xss转义的时候不能对If-None-Match和If-Match头信息做处理,其实原来的转义的做法并不正确,虽然在tomcat下没有什么错误,但是会造成js和css等静态文件浏览器缓存失效。