Пустое тело ответа изображения, когда заголовок ответа имеет правильную длину в IE и Fiddler

Здесь есть немного деталей:

  1. Контейнер: JETTY 7.62 и 7.69 (пробовал оба)
  2. Изображение: пробовал jpgs и pngs
  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. Мы не осознавали, что он также поместит кодировку всего, включая изображения!

Есть ли простой способ отфильтровать изображения?

1 ответ

Очень конкретный способ решения этой проблемы - использовать обработчик перезаписи для удаления этой кодировки в заголовке ответа.

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

Я не уверен, что я действительно рекомендовал бы это, но это возможно. У нас даже есть специальное правило IE для другой исторической странности IE. Вы можете использовать существующее правило перезаписи на основе шаблона или создать собственное правило для этого.

Вероятно, лучше решить эту проблему в вашем приложении.

Другие вопросы по тегам