当响应头在IE和Fiddler中具有正确长度时,空图像响应体

时间:2013-02-28 20:45:15

标签: image internet-explorer ssl jetty

这里有相当多的细节:

  1. 容器:JETTY 7.62和7.69(试过两者)
  2. 图片:试过jpgs和 的PNG
  3. 浏览器:IE9和Fiddler工具
  4. 因此,我们有一个网页,其中包含标准的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我们没有意识到的是它还会把包括图像在内的所有内容都放在一起!

    是否有一种简单的方法来过滤图像?

1 个答案:

答案 0 :(得分:1)

解决此问题的一种非常Jetty的方法是使用重写处理程序删除响应头中的charset。

http://wiki.eclipse.org/Jetty/Feature/Rewrite_Handler

我不确定我是否真的会推荐它,但它可能。对于其他IE历史奇怪,我们甚至有IE特定的规则。您可以使用现有的基于模式的重写规则,也可以为此创建自己的规则。

可能更好地在你的应用中解决这个问题。