Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
本記事は、マイクロソフト本社の IE チームのブログ から記事を抜粋し、翻訳したものです。
【元記事】IE9 Standards Mode Accepts only textcss for stylesheets (2011/3/28 1:39 AM)
先日、以下のように IE 9 では適切に表示されないブログを目にしました。
このブログ サイトは、他のブラウザーを使ったり、アドレス バーのアイコンをクリックして互換表示にした場合には、以下のように適切に表示されます。
IE 9 では何が起きているのでしょうか。明らかにスタイルシートが適用されていませんが、なぜでしょうか。
F12 キーで起動される、IE 9 開発者ツールの [コンソール] タブには、サーバーがスタイルシート応答として適切でない MIME タイプを指定している場合に通知が記録されます。ただし、スタイルシートのダウンロードが失敗した場合、[コンソール] には明示的な通知は記録されません。ダウンロードの失敗の原因を究明するには、開発者ツールの [ネットワーク] タブ、または Fiddler を使用する必要があります。
このサイトの問題の根本は、Fiddler を使ってトラフィックを確認すればすぐに明らかになります。IE 9 が標準モードで実行されていると、このサイトは、重要なスタイルシートに対して HTTP/406 のエラーを返します。
スタイルシートのダウンロードが失敗すると (上の図の赤字エントリを参照)、IE が適用できるスタイルがなくなり、スタイル設定なしの HTML が表示されます。
IE 9 の標準モードでは何が異なるのでしょうか。
旧バージョンの IE では、ページ内のすべてのリソースについて "Accept: */* " という要求ヘッダーが不適切に送信されていましたが、IE 9 の標準モードではこの長年にわたる制限がなくなりました。このヘッダーは、サーバーからどのようなコンテンツ タイプが返されても IE は完璧に処理できるという誤った内容を伝えていました。
これまでも常に間違いだったということですが、すべてを受け入れるという指定は IE 9 では明らかに間違いです。これは、セキュリティおよび標準の観点から当然です。IE 9 の標準モードでは、スタイルシート応答は MIME タイプ text/css である必要があります。text/css でない場合、IE 9 は応答をスタイルシートとして読み込もうとしません。IE 9 はこの要件をサーバーに伝えるため、スタイルシートの HTTP 要求を行うときに text/css 応答のみを受け入れることを明示します。
このサイトのサーバーにはバグがあることがわかりました。このサーバーは、ブラウザーが txt/css 応答のみを受け入れると明示する場合、応答コンテンツが実際に text/css であっても、"HTTP/406 Not Acceptable" 応答を返します。HTTP/406 応答の応答ヘッダーを見れば、問題解決へのヒントが得られます。
HTTP/1.1 406 Not Acceptable
Server: Apache
Alternates: {"serendipity.css.php" 1 {type application/x-httpd-php}}
Vary: negotiate,Accept-Encoding
TCN: list
Content-Type: text/html; charset=iso-8859-1
Alternates ヘッダーを見ると、問題の CSS ファイルは PHP によって生成されることがわかりますが、Web サーバー ソフトウェアは PHP ファイルの MIME タイプ は必ず "application/x-httpd-php" であると想定しています。この想定のため、Web サーバーは PHP ファイルの実行を拒否することになり、PHP ファイルが適切な text/css MIME タイプを設定することができなくなります。
Firefox、Chrome、Opera のいずれの Accept ヘッダーも、スタイルシート応答についてすべての MIME タイプを受け入れることを示していますが、IE 9 と同様、これらのブラウザーは MIME タイプが適切でないスタイルシートを適用することはありません。
IE 9 のユーザーは、このサイトを互換表示で表示することでバグを回避できます。IE 9 の互換表示では以前と同じ動作となり、外部リソースのダウンロード要求についてどのような MIME タイプでも受け入れるという指定になります。
Eric Lawrence