IE11がIEとして認識されないトラブルについて

IE11がIEとして認識されないトラブルについて

ユーザーエージェントで各ブラウザを認識し、
ブラウザによって処理の内容を振り分ける事は良くあると思います。

今回、Internet ExplorerのバージョンがIE10からIE11にバージョンアップした事により、
IE11でページを見た際に不具合が確認されました。

ユーザーエージェント文字列の変更

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

以前のバージョンIE10と新バージョンIE11のユーザーエージェントをPHPで出力して比較したところ、

【IE10】
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

【IE11】
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

IE11ではブラウザトークン(MSIE 10.0)がなくなり、
バージョントークン(rv:11.0)に変更されていました。

詳しくはマイクロソフトの公式ページで確認して下さい。

ユーザーエージェントを取得した文字列からIEとして認識する文字列の見直しが必要となります。

ユーザーエージェント文字列一覧

参考までに、IEのユーザーエージェント文字列一覧を集めてみました。

▼Windows8 IE11 32bit
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE11 32bit
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE11 64bit
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE10 64bit
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

▼Windows7 IE8 64bit
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

【WEB高速化】外部ファイル呼び出し時の二重リクエストを見直す

WEBページの表示速度を早くしたいという事で、効果がある対策があったのでメモ。

外部ファイルの呼び出し処理で、HTTPによるリクエスト再度行われていないか確認する。

例えば、PHPの関数file_get_contents()などで、外部ファイルを読み込む際に、http://~と自分自身のURLを絶対バスで記述して呼び出していないか確認する。

自分自身のURLの外部ファイルを絶対パスで読み込むと、外部ファイルを呼び出す為に、再びHTTPリクエストをかけることになり、この二重リクエストがムダなWebアクセスとなる。

【本来の処理の流れ】

  • ①WebブラウザがリクエストをWebサーバーへ送る
  • ②Webサーバーがリクエストを解析して処理する
  • ③WebサーバーがレスポンスをWebブラウザへ返信する
  • ④Webブラウザが受信データを解析して表示する

【二重リクエストでの処理の流れ】

  • ①WebブラウザがリクエストをWebサーバーへ送る
  • ②Webサーバーがリクエストを解析して処理する
  • 処理の中のHTTPリクエストを発行する
  • 再びWebサーバーへアクセスする
  • ⑤WebサーバーがレスポンスをWebブラウザへ返信する
  • ⑥Webブラウザが受信データを解析して表示する

この二重リクエストのムダを見直す事により処理速度を改善する。

【改善方法】

■改善前

file_get_contents('http://www.ore-memo.com/inc/menu.html');

■改善後

file_get_contents($_SERVER['DOCUMENT_ROOT'].'/inc/menu.html');

自分自身のURLを指定してfile_get_contentsを呼び出している箇所を$_SERVER['DOCUMENT_ROOT']getenv(‘DOCUMENT_ROOT’)に記述を変える事により、サーバ内部で処理を完結させることができる。

このように二重リクエストを解消してあげるだけで、WEBページの表示速度を早くする事ができます。

あと、$_SERVER['DOCUMENT_ROOT']getenv(‘DOCUMENT_ROOT’)
のどちらを利用するかという事になります。

PHPをUNIXのコマンドとして使うような場合は、新たにパスを取得する必要があるので関数getenv()を利用することに限定されますが、一般的なブラウザ経由(apache経由)ならすでに環境変数として習得されている$_SERVER[]を利用する方が早いという結論になりました。

一般的なWEBサーバなら$_SERVER['DOCUMENT_ROOT']が早い!