2013-02-28 57 views
2

正确的长度是有相当多的细节的位置:空图像响应身体时响应报头具有在IE和提琴手

  1. 容器:JETTY 7.62和7.69(都尝试)
  2. 图片:试图JPG文件和 PNG格式
  3. 浏览器: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我们没有意识到的是,它也会把一切都包括在图像中的字符集!

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

+2

好吧,看来这个问题背后的原因是图像的字符集编码。 IE浏览器不喜欢它.. – pookieman 2013-03-01 00:58:16

+0

我有与WebLogic 10.3.6和IE11相同的问题与一些新添加的PNG图像到我的应用程序。我有相同的CharacterEncodingFilter,但它不会在图像的情况下将编码添加到标头。我也完全禁用它,没有任何帮助。 IE中的devtools显示img的加载结果是:(中止)。它仅通过HTTPS发生,HTTP始终正常。 – 2015-11-23 22:23:42

回答

1

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

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

我不知道我真的建议,但其可能的。我们甚至有一个IE特定的规则在那里为其他IE历史奇怪。您可以使用现有的基于模式的重写规则或为此创建您自己的规则。

虽然可能更好地解决这个问题。