2

这里有很多细节:

  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 我们没有意识到的是,它还会将包括图像在内的所有内容都放入一个字符集!

有没有一种简单的方法来过滤掉图像?

4

1 回答 1

1

解决此问题的一种非常 Jetty 特定的方法是使用重写处理程序来删除响应标头中的该字符集。

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

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

不过,在您的应用程序中解决这个问题可能会更好。

于 2013-03-01T14:53:01.627 回答