IE(IE11で再現)で1ページに多数の画像をロードすると、一部の画像がロードに失敗し始め、コンソールに次の警告のようなものが表示されます。
DOM7009:URLで画像をデコードできません: '[some unique url]'。
ネットワークトラフィックを見ると、これらの各イメージに対してサーバーから受信した有効な応答があります。毎回同じ画像であるとは限りません。開発ツールを使用して画像を強制的にリロードする場合(例:いくつかの無関係なurlパラメーター "&test = 1"を含むようにurlを更新する)、エラーなしで通常にロード/レンダリングします。この動作をさまざまな種類の画像(jpegs/pngs、下に含まれるpngの例)で再現しました。これは、画像の数が増えるにつれて頻繁に発生するようであり、各画像のサイズと何らかの相関関係がある場合もあります。
何がこれを引き起こしているのかについての考えはありますか?潜在的な回避策はありますか?どんな助けも大歓迎です。
実際の問題は 別のStack Overflowの質問 で対処されているようです。ここでのすべての答えは、さまざまな方法で問題を回避しますが、ファイルが主張する形式ではないため、これはおそらく起こります。 nosniff が有効になっているため、ブラウザはこの問題を回避できず、間違った画像タイプをデコードしようとします。
つまり、ファイル拡張子が実際のエンコードと一致しません
HTTPヘッダーでファイルがJPEGとして報告されたが、実際にはPNGであったという同様の問題がありました。ファイルに一致するようにファイルタイプを変更するか、「X-Content-Type-Options」ヘッダーを削除すると、問題が修正されました。
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" />
私が直面していた問題は同様でした。 Javaサーブレットリクエストを介してドキュメントのページとサムネイルを表示するWebアプリケーションがあり、ブラウザがPNG画像を送信するのに応答します。@ user1069816が言ったように、応答は「画像をデコードできません」という問題の原因:
X-Content-Type-Options: nosniff
私の場合、このヘッダーはSpring Securityによって導入されました。これに加えて XSS攻撃を回避するためのInternet Explorerのセキュリティメカニズム 、応答時にこのヘッダーを無効にする最も速い解決策は、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では発生していません。
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」を削除したコメント付きコードを参照してください。
何らかの用途がある場合、WinJSアプリケーションでこれを見てきましたが、これはレンダラーがメモリ不足であることを報告する方法だと思います(不可解ではありますが!)
理由は、圧縮されたpng
イメージ(たとえば500 KBですが、ピクセルサイズが大きい)を読み込むと、この問題が発生するからです。
例
20000 x 6000の画像でこれを試みると、このエラーが散発的に発生します。これは、それが20000 x 6000 x 4(480,000,000バイト)または〜480MBであるためだと推測しています。
これを14000 x 6000で試してみると、〜336MBになりそうですが、エラーはまだ発生していません。
35000 x 20000の画像でこれを試してみると、約2.8GBになります。
このエラーも発生しました— IE 11.0.9600.18059。私のテストによると、それはタブによって消費されるメモリの量によるものでした(例:追加のDOM要素を追加するとメモリの使用量が増加します)。
メモリプロファイラを使用して、メモリ使用量が約1.5GBに達するとエラーが発生することがわかりました。これにより、次の奇妙さが発生しました。
visibility: hidden
に設定されているかのように、ページ内に空のスペースとして(正しい寸法で)表示されます。ページをリロードするたびに、異なる画像/ SWFが影響を受けます。
私にとっての解決策は、ページの設計方法を単純に調整することでした。したがって、IEが多くのメモリを消費することはありません。
画像が〜2.5MB(.jpg)のとき、この問題が発生しました。 540kbに縮小すると、問題は発生しなくなります。これは間違いなくIEメモリの問題です(または場合によっては発生する可能性があります)。
これは、私のWeb構成にX-Content-Type-Options
に関連するものがなかったため、私にとって有効な唯一の修正です。
基本的に画像ギャラリーであるページでこの同じエラーが発生し、各画像がサムネイルとして最大解像度でロードされていました。ページの重量は約220メガバイトでした。一部のサムネイルが読み込まれず、「URLで画像をデコードできません」というエラーが理由として表示されていました。
ただし、IEは、画像のURLを直接表示することにより、各画像を個別にロードできます。これは、画像のタイプ/エンコードに問題はなかったことを意味します。画像の場合、すべての画像をサムネイルとして読み込むことができませんでした(および読み込まれなかった画像はページが更新されるたびに変更されます)。
私の回避策は、ページに低解像度のサムネイルを表示し(ページの重さを220kbに変更)、サムネイルリンクを完全な高解像度画像に表示することでした。
配信する画像のサイズとファイルサイズを小さくできるかどうかを確認する価値があります。
これを解決するために私が見つけた唯一の方法は、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
これはありませんt work. It's a little frustrating. It's a url so long and I thing that **SetEnvIf** doesn
tは最後まで読みました。
IE11でも同じ問題が頻繁に発生しますが、原因を特定することはできません。ただし、JavaScriptがクラッシュした直後に発生し始めます。私はimgurの問題ではなく、IE11の問題です。
私が問題から抜け出すことができた唯一の方法は、Explorerをクラッシュさせ、それをリロードするか再起動することです。