Hebikuzure's Tech Memo

2009年8月9日

IE の互換表示リストの整理

Filed under: Internet Explorer — hebikuzure @ 2:02 PM

IE Compatibility List Pruning
http://blogs.msdn.com/ie/archive/2009/07/01/ie-compatibility-list-pruning.aspx


あまり紹介されていないような気がする、サーバーからの働き掛けでユーザーの互換表示リストからドメインを削除する方法についての IE Blog の記事です。

以下の文章は IE Blog の 7/1 の記事 IE Compatibility List Pruning を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation およびマイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


IE の互換表示リストの整理

こんにちは、Internet Explorer のネットワーキングのテスト担当をしている Michael Benny です。Internet Explorer 8 の開発期間中、互換表示の数多くの要素を検証する責任を負っていました。さて互換表示機能がどのように動作するのかと、サイトを訪問した際に IE8 のユーザーに互換表示ボタンが確実に表示されないようにサイトの制作者が設定する手順についてはこれまでに解説していました。今回はそれらとは異なる、まだカバーしていない次のようなシナリオを扱います。サイトを IE8 に対応できるよう更新する前にエンド ユーザーがサイトを互換表示リストに追加していて、サイトの対応が完了した場合、ユーザーのリストから取り除いてもらうにはどうすれば良いのでしょう? ここではドメインをユーザーの互換表示リストから “整理” できる、今までブログで紹介した事のない特別な機能についてお伝えします。

互換表示についての再確認となりますが、Internet Explorer 8 は既定では最も標準に準拠したレンダリングの動作を行います。この設定は、IE に以前の、互換性の乏しい動作を期待している Web サイトで問題を引き起こします。サイトの管理者であれば、管理しているサイトで IE8 のクライアントが互換性のあるエクスペリエンスが得られるようにする、数多くの自由に使えるツールがあります。IE8 の向上した標準を利用する方法と、X-UA-Compatible ヘッダーを使って IE8 に “コンテンツを IE7 のように表示しろ” と伝える方法は、サイトの制作者が要求できるもっとも一般的な二つの選択肢です。

エンド ユーザーにも、X-UA-Compatible オプションが明示的に設定されていないサイトを普通にブラウズしている際に遭遇した互換性の問題を回避するための手段があります。ユーザーはブラウザーのアドレス バーにあるボタンで切り替えて、IE7 エミュレーション モードである互換表示でサイトを見る事ができます。Internet Explorer 8 は互換表示ボタンが押された事をドメイン単位で記憶し、同じサイトを再び訪問した際にシームレスなエクスペリエンスを提供します。このドメインはクライアントのレジストリの HKCU\Software\Microsoft\Internet Explorer\Browser Emulation に記録されます。

サイトがユーザーの互換表示リストに含まれていると、そのサイトの既定のドキュメント表示の動作は IE7 Emulation モードに設定され、ページのリクエストに使用される User Agent 文字列 にも反映されます。サイトの管理者は、X-UA-Compatible タグを使って常にサイトがどのように表示されるか制御できます。クライアントでの互換表示の設定は上書きされ、サイトが表示されるべきレンダリング モードを正確に指示できます。さらにサイト管理者には、広範なページに対して X-UA-Compatible ヘッダーを HTTP ヘッダー (例 : IISApache) として展開する方法もあります。この X-UA-Compatible を使う方法でさらに、ユーザーの互換表示リストからドメインの項目を削除する事も可能です。以下はその方法です。

ドメインが削除されるには、最初にエンド ユーザーが X-UA-Compatible Meta タグまたは HTTP ヘッダーのあるページを訪れる必要があります。IE8 <META> タグの存在は実際にリストの クリーンアップ プロセスのトリガーとなりますが、それが全てであるという事ではありません。次のステップとして ‘IEStandards.xml’ という名前のファイルがドメインのルートで探されます。IE はこのファイルの存在を確認するためファイルへの HEAD リクエストを最初に行います。このファイルが存在しなければ、ドメインはユーザーのリストにそのまま残されます。HEAD リクエストが成功した場合、IE はこのファイルに対する HTTP GET リクエストを行います。このファイルの中の、‘IE8StandardsMode’ タグがリストの項目を実際に削除できるという合図になります。以下に ‘example.com’ というドメインでの正しいサーバー設定の例を示します:

  1. ページの X-UA-Compatible ヘッダーの値を IE8 モードを指定するよう設定します。
    <meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE8″>
  2. ‘example.com’ ドメインのルートにファイルを配置します
    http://example.com/IEStandards.xml
  3. ファイルには IE8StandardsMode というルート XML 要素が必要です
    <IE8StandardsMode/>

サイト管理者は、この動作が全てのサブ ドメインに影響する点に注意すべきです。つまり下の図のような構成の場合、ユーザーが ‘support.example.com’ 内のページを訪問すると、別に ‘mail.example.com’ という、ユーザーの互換表示の設定を優先させたい別のサブ ドメインがあっても、‘mail’ サブドメインも IE8 標準モードの表示が使用されるようになります。

01_IECompatibilityListPruning_1

互換表示リストの項目はドメイン全体に影響します。具体的には ‘mail.example.com’ や ‘support.example.com’ などのサブドメイン単位ではなく ‘example.com’ 全体に影響します。そのため IE はドメイン全体を示すソースからの要求に基づいてドメインの項目を削除する処理を行う必要があります。そうでないと、サブドメインへの副作用が発生します。一例として、‘example.com’ ドメイン全体がユーザーの互換表示リストに含まれているとしましょう。その後で、‘support.example.com’ はサイトを更新してIE8 をサポートする多大な作業により IE8 標準モードで表示するのが最適である事を示す HTTP ヘッダー / <META> タグが含まれるようになりましたが、‘example.com’ と ‘mail.example.com’ はまだ更新されていません。もし IE が HTTP ヘッダー / <META> タグが ‘support.example.com’ で見つかった事のみに基づいて ‘example.com’ をユーザーのリストから削除してしまったとすると、ユーザーはまだ更新されていない ‘example.com’ または ‘mail.example.com’ のコンテンツを訪問した際に互換性の問題に遭遇する事になります。ルート ドメイン レベルにある ‘IE8StandardsMode’ ファイルをチェックする動作は、ドメインをリストから削除できる事を示す “権威のある” 情報が必要であるため、こうした問題を回避できます。このようにして、ユーザーにはそのドメイン全体で一貫した互換性のエクスペリエンスが保証されるのです。

IEStandards.xml ファイルを取得する動作は、IE がお気に入りアイコン (Favicon) をドメインごとにリクエストする動作と非常によく似たモデルですが、サーバーのオーバーヘッドの問題は回避したいと考えています。X-UA-Compatible オプションが設定されているページを表示するごとに IE8 が不必要な複数のリクエストをサーバーに対して行わないよう、最新のリクエストから 30 日のタイムアウト期間が設けられています。この 30 日間のタイムアウトはユーザーがドメインを互換表示のリストに追加した際にも設定されますので、ドメインのルートに ‘IE8StandardsMode’ ファイルを配置した後に IE8 互換表示でのリクエストがあっても心配する必要はありません。

01_IECompatibilityListPruning_2

ありがとうございました。
Michael Benny
IE テスト担当

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。