Hebikuzure's Tech Memo

2008年11月3日

favicon.ico へのアクセスが原因でセッションが維持されない場合がある

Filed under: Internet Explorer — hebikuzure @ 6:06 AM

MSKB 958326
Internet Explorer 7 で favicon.ico 取得のリクエストを送信後、サイトのログインに失敗したり負荷分散装置でセッションが正しく維持されない場合がある
http://support.microsoft.com/kb/958326


favicon は Internet Explorer で最初に実装され、その後他のブラウザでも実装されるようになった機能だが、その実装やアイコンを表示するシナリオはブラウザによって異なっている。Internet Explorer 6 までの Internet Explorer では、ページをお気に入りに登録するタイミングで、ページ中に <link rel="shortcut icon" href="….."> という形で指定があればそのアイコン ファイルを、無い場合はページのドメインのルート フォルダへ favicon.ico をリクエストする動作になっている。

MSKB 415022
[IE5] お気に入りに表示されるアイコンをカスタマイズする
http://support.microsoft.com/kb/415022/ja

これに対して Internet Explorer 7 では (Internet Explorer 8 でも) 、アドレス欄やタブの見出しに favicon を表示するため、ページを最初に表示する場合かならず favicon.ico へのリクエストが発生する。二度目以降のアクセスでもキャッシュ (インターネット一時ファイル) に favicon.ico のデータが無ければ、同様にリクエストが発生する。

この動作のため、以前のバージョンでは正常に動作していた Web アプリケーションでセッションが維持できなくなったりログオンが正常に行えなくなったりする現象についてサポート技術情報が公開されている。
ページに <link rel="shortcut icon" href="….."> という favicon の指定があり、そのアイコンがクライアントから取得できるようになっていれば問題は無いが、そうした指定が無い場合、Internet Explorer はページのドメインのルートにリクエストを行う。Web アプリケーション側でこのリクエストを想定して適切な処理 (実際に適切な favicon.ico を返す、404 などのレスポンスを返す、など) を行っていれば問題ないが、例えば不正なリクエストとしてセッションを切断するような実装になっていると、問題が生じる。
またセッション ID の発行の仕方によっては、負荷分散装置 (NLB) でセッションが正しく維持できなくなる (以降のリクエストが意図せず別のサーバーにリダイレクトされてしまう、など) などの問題も発生する可能性がある。

Internet Explorer 6 では問題なく動作するのに Internet Explorer 7 (8) で技術情報に記載されているような問題が生じる場合、favicon.ico へのリクエストが原因では無いか疑って見る必要がある。これについてはサーバー側のアクセス ログを確認する、適切な場所でネットワーク トレースか HTTP トレースを採取する、などで確認できると考えられる。

残念ながら Internet Explorer 側で favicon.ico へのリクエストを抑止する事はできない。解決方法としては、Web アプリケーションや NLB 側で対処するしかない。一番簡単なのはドメインのルートにクライアントからアクセス可能な favicon.ico を置く事だが、それが難しい場合はクライアントからアクセス可能な場所に favicon.ico を置き、各ページに <link rel="shortcut icon" href="….."> の形でそのアイコン ファイルの指定を追加すれば良い。

なおこの現象と同様や類似の現象は、Internet Explorer 7 と同様にアドレス欄やタブに favicon を表示する動作の、他のブラウザでも発生する可能性があると考えられる。

そもそも favicon.ico へのリクエストをお気に入りへの登録時に限っていたのはリクエストによるネットワーク トラフィックとサーバー負荷の増加への配慮であったと考えられる。しかしながら現状ではその程度のリクエストでトラフィックや負荷の増加が問題になる事より、ユーザーへの見た目の分かり易さなどのエクスピリエンスの方が重視されているという事なのだろう。さらに Internet Explorer 8 ではサーバーあたりの HTTP 同時接続数も増加するし、アクセラレータやWeb スライスなどページ表示以外でのリクエストも多くなる。公開サーバーはそうした負荷に耐えるのが当たり前、クライアントも高速回線に接続されているのが当たり前、という前提での仕様と考えられる。贅沢な世の中になったものだ。

広告

コメントする »

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

RSS feed for comments on this post. TrackBack URI

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

WordPress.com で無料サイトやブログを作成.

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