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

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

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

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

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

Образец PNG

11 ответов

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

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

У меня была эта проблема на сайте, размещенном в 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" />  

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

Проблема, с которой я столкнулся, была похожей. У меня есть веб-приложение на 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.

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

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

  1. Некоторые изображения будут загружены, но не будут отображаться. Они будут отображаться как пустое место на странице (с правильными размерами), как если бы изображение было установлено на visibility: hidden,
  2. Некоторые изображения будут загружены, но не смогут декодироваться. Они будут отображаться как маленький черный ящик с буквой X. На этих изображениях также будет отображаться ошибка DOM7009 в консоли.
  3. Вспышки SWF будут отображаться как черные ящики.
  4. Другие случайные странности.

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

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

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

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

Например

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

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

Если я пытаюсь сделать это с изображением 35000 x 20000 ~2,8 ГБ, это всегда происходит.

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

  • DOM7009: Невозможно декодировать изображение по 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", и он работает!!!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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