这里有相当多的细节:
因此,我们有一个网页,其中包含标准的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我们没有意识到的是它还会把包括图像在内的所有内容都放在一起!
是否有一种简单的方法来过滤图像?
答案 0 :(得分:1)
解决此问题的一种非常Jetty的方法是使用重写处理程序删除响应头中的charset。
http://wiki.eclipse.org/Jetty/Feature/Rewrite_Handler
我不确定我是否真的会推荐它,但它可能。对于其他IE历史奇怪,我们甚至有IE特定的规则。您可以使用现有的基于模式的重写规则,也可以为此创建自己的规则。
可能更好地在你的应用中解决这个问题。