Подтвердить что ты не робот

Изображения, не загружаемые в IE с DOM: ошибка 7009 (неспособная декодировать) в консоли

При загрузке многих изображений на одной странице в IE (воспроизводится в IE11) некоторые из них начинают не загружаться и имеют что-то похожее на следующее предупреждение в консоли:

DOM7009: невозможно декодировать изображение по URL-адресу: "[уникальный URL-адрес]".

Когда я смотрю на сетевой трафик, появляются действительные ответы, полученные для каждого из этих изображений с сервера. Это не всегда одно и то же изображение. Если я использую инструменты dev для принудительного перезагрузки образа (например: я обновляю url, чтобы включить некоторый внешний параметр url "& test = 1" ), он загружает/визуализирует нормально без ошибок. Я воспроизвел это поведение с различными типами изображений (jpegs/pngs, пример png, приведенный ниже). Это, как представляется, происходит чаще, так как количество изображений увеличивается, а также может иметь некоторую корреляцию с размером каждого изображения.

Любые мысли о том, что может быть причиной этого? Потенциальные проблемы? Любая помощь приветствуется.

Sample PNG

4b9b3361

Ответ 1

Похоже, проблема актуальна в еще одном вопросе. Все ответы здесь затрагивают проблему различными способами, но это, вероятно, происходит потому, что файл не соответствует формату. Поскольку nosniff включен, браузер не может обойти эту проблему и пытается декодировать неправильный тип изображения.

Другими словами: расширение вашего файла не соответствует фактической кодировке

Ответ 2

У меня была эта проблема на сайте, размещенном в IIS, поскольку заголовок X-Content-Type-Options был установлен в родительских приложениях web.config следующим образом:

<system.webServer>   
 <httpProtocol>    
  <customHeaders>    
   <add name="X-Content-Type-Options" value="nosniff" />    
  </customHeaders>    
 </httpProtocol> 
</system.webServer>  

Удаление в приложениях web.config исправлено:

<remove name="X-Content-Type-Options" />  

Ответ 3

У меня была аналогичная проблема, когда файл был указан в заголовках HTTP как JPEG, но был фактически PNG. Исправлена ​​проблема с изменением типа файла в соответствии с файлом или удалением заголовка "X-Content-Type-Options".

Ответ 4

Проблема, с которой я столкнулся, была похожей. У меня есть веб-приложение на Java, которое показывает страницы и эскизы документа через запросы сервлетов, которые отвечают браузеру, отправляющему изображения PNG. Как сказал @user1069816, ответы приходили с заголовком, который вызывал проблему "Невозможно декодировать изображение":

X-Content-Type-Options: nosniff

В моем случае этот заголовок был представлен Spring Security. Кроме того, это механизм безопасности для Internet Explorer, позволяющий избежать XSS-атак. Самое быстрое решение для отключения этого заголовка при ответе заключалось в том, чтобы поместить следующую строку в файл контекста приложения Spring Security, раздел headers:

<http use-expressions="true" create-session="never" auto-config="true">
    <headers>
        <!-- this section disable put the header 'X-Content-Type-Options' -->
        <content-type-options disabled="true"/>
    </headers>

Эта проблема возникала только в Internet Explorer 11. Не в Chrome или Firefox.

Ответ 5

Если это было какое-либо использование, я видел это в своем приложении WinJS, и я считаю, что это способ рендеринга отчетов о том, что он не в памяти (хотя и критически!)

Причина. Я говорю, что если я загружаю сжатое png изображение, скажем, 500 КБ, но большое с точки зрения размеров пикселей, я получаю эту проблему.

Например

Если я попробую сделать это с изображением 20000 x 6000, я получаю эту ошибку спорадически, что я предполагаю, потому что это 20000 x 6000 x 4 (480 000 000 байт) или ~ 480 МБ.

Если я попробую сделать это с 14000 x 6000, это будет ~ 336 МБ, что кажется ОК, и я еще не получил ошибку.

Если я попробую сделать это с размером 35000 x 20000 ~ 2.8 ГБ, это всегда произойдет.

Ответ 6

Я тоже столкнулся с этой ошибкой - IE 11.0.9600.18059. Согласно моим испытаниям, это было почти наверняка из-за объема памяти, потребляемой вкладкой (например: добавление дополнительных элементов DOM увеличивает использование памяти) - не путать с объемом данных, загружаемых по сети.

Используя профилировщик памяти, я обнаружил, что ошибки возникли, когда использование памяти достигло потолка около 1,5 ГБ. Это вызвало следующую странность:

  • Некоторые изображения будут загружены, но не будут отображаться. Они отображались как пустое место на странице (с правильными размерами), как если бы изображение было установлено на visibility: hidden.
  • Некоторые изображения будут загружены, но не будут декодироваться. Они появятся как маленький черный ящик с X. Эти изображения также отображают ошибку DOM7009 в консоли.
  • Flash SWF будут отображаться как черные ящики.
  • Другая случайная странность.

Различные изображения /SWF будут влиять каждый раз, когда я перезагружаю страницу.

Решение для меня состояло в том, чтобы просто настроить способ создания страницы, чтобы она не вызывала у IE столько памяти.

Ответ 7

У меня та же проблема в IE11, когда я загружал изображения, это выдает мне ошибку:

DOM7009: Unable to decode image at URL

Во всех других браузерах это работает как шарм!

После небольшого исследования наконец пришли к выводу, как показано ниже:

в файле Web.config ::

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="Deny" />
        <remove name="X-Powered-By" />
        <add name="X-XSS-Protection" value="1" />
        <!--To resolve the user image not displaying in the chat and in the header for IE 11--> 
        <!--<add name="X-Content-Type-Options" value="nosniff"/>-->
      </customHeaders>
    </httpProtocol>
</system.webServer>

Пожалуйста, посмотрите закомментированный код, я удалил " X-Content-Type-Options ", и он работает !!!

Ответ 8

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

Тем не менее, IE может загружать каждое изображение отдельно, напрямую просматривая URL-адрес изображения, что, я думаю, не представляет проблемы с типом/кодировкой изображения. Таким образом, хотя IE11 может загружать отдельные изображения, он не мог загружать все изображения в виде эскизов (а изображения, которые не были загружены, менялись каждый раз, когда страница обновлялась).

Мое обходное решение состояло в том, чтобы отображать миниатюру с низким разрешением на странице (вес страницы изменен на 220 кб) и иметь ссылку эскиза для полного изображения привет-Res.

Стоит проверить, можно ли уменьшить размеры обслуживаемых изображений, а также размер файла.

Ответ 9

У меня была эта проблема только сейчас, когда изображение было ~ 2,5 МБ (.jpg). Сократите его до 540 КБ, и проблема больше не возникает. Похоже, это определенно проблема с памятью IE (или может быть в некоторых случаях).

Это единственное исправление, которое сработало для меня, поскольку у меня не было ничего, связанного с X-Content-Type-Options в моей веб-конфигурации.

Ответ 10

Единственный способ решить эту проблему - отключить это правило браузером в конфигурации сервера Apache.

 BrowserMatch MSIE explorer
 Header set X-Content-Type-Options nosniff env=!explorer

Это работает для меня, но это решение мне не нравится. Я бы предпочел переписать на сервере Apache правильный тип mime.

Моя проблема заключается в том, что URL-адрес содержит строку "captcha", но я не могу ее установить.

SetEnvIf Request_URI ^(.*)captcha$ headerpng 
Header set "Content-type image/png" env=headerpng 

Это doesn t work. It a little frustrating. It a url so long and I thing that **SetEnvIf** doesn t читает его до конца.

Ответ 11

Я часто получаю ту же проблему с IE11, и я не могу определить, что ее вызывает. Однако это начинает происходить сразу после того, как JavaScript разбился. Я не проблема imgur, проблема IE11.

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