Пустое тело ответа изображения, когда заголовок ответа имеет правильную длину в IE и Fiddler
Здесь есть немного деталей:
- Контейнер: JETTY 7.62 и 7.69 (пробовал оба)
- Изображение: пробовал jpgs и pngs
- Браузер: 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. Вы можете использовать существующее правило перезаписи на основе шаблона или создать собственное правило для этого.
Вероятно, лучше решить эту проблему в вашем приложении.