这里有很多细节:
- 容器:JETTY 7.62 和 7.69(都试过了)
- 图片:尝试过jpg和png
- 浏览器:IE9 和 Fiddler 工具
所以我们有一个网页,其中包含一个标准的 img 标签。当我们在缓存被清除后从 IE 访问页面时,我们得到一个 200 的图像,事实上这就是我们在
请求标头:
Key Value
Request GET /cc/auth/images/test.jpg HTTP/1.1
Accept image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5
Accept-Language en-US
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Accept-Encoding gzip, deflate
Host van-test-login9.login.dev.net:8443
Connection Keep-Alive
响应标头:
Key Value
Response HTTP/1.1 200 OK
Date Thu, 28 Feb 2013 19:59:48 GMT
Content-Length 25926
Content-Type image/jpeg;charset=UTF-8
Last-Modified Thu, 28 Feb 2013 19:58:38 GMT
但是响应正文是空的..在服务器端我们看到
[28/Feb/2013:19:59:25 +0000] "GET /cc/auth/images/test.jpg HTTP/1.1" 200 25926
因此图像在浏览器中出现损坏。我们一直在通过切换 JETTY 版本进行一些实验,这似乎没有什么不同。我们在使用 FF 或 Chrome 时看不到这个问题。此外,如果我们转到端口 8080,我们也无法重现该问题。所以它似乎是 SSL/JETTY/IE 的组合。
我们还可以通过在浏览器中输入资源位置来尝试直接访问图像来重现问题。我们也可以使用 Fiddler 重新创建。我们的 JETTY 日志、应用程序或其他方面没有错误。
我还应该补充一点,这是间歇性的。如果您继续按 F5,一旦发生这种情况,最终它将加载和渲染,然后在您清除缓存之前您不会看到损坏的图像。
那里的任何人都有建议或想法如何弄清楚这里发生了什么?
非常感谢
所以更多信息,我们在 web.xml 中有这个
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
和
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我们这样做是为了确保我们所有的输出都是 UTF-8 我们没有意识到的是,它还会将包括图像在内的所有内容都放入一个字符集!
有没有一种简单的方法来过滤掉图像?