環境変数 HTTP_USER_AGENT から、アクセス元のブラウザーやプラットフォームを知ることができます。ただ、ブラウザーなどのクライアントソフト側で定義するものであり、信用できるものではないことに注意してください。
HTTP_USER_AGENT は、ブラウザーによってフォーマットがばらばらです。したがって、いくつかの場合わけをしてスクリプトを組む必要があります。
環境変数 HTTP_USER_AGENT から、アクセス元のブラウザーやプラットフォームを知ることができます。ただ、ブラウザーなどのクライアントソフト側で定義するものであり、信用できるものではないことに注意してください。
HTTP_USER_AGENT は、ブラウザーによってフォーマットがばらばらです。したがって、いくつかの場合わけをしてスクリプトを組む必要があります。
"MSIE" という文字列が入っていれば、Internet Explorer と判別することができます。また、"Mozilla"と"compatible"という文字列が含まれます。
ブラウザーバージョンは、"MSIE" の次にくる数字と判断できます。
プラットフォームは、"Windows 95", "Windows 98", "Windows NT", "Windows NT 5.0", "Windows CE", "Mac_PowerPC", "Mac_PPC", "Mac_68000" をキーに判断することができます。ただし、Windows Me の場合には、"Windows 98; Win 9x 4.90"となりますので、スクリプトを作る上で、Windows 98と判断されないよう、注意が必要です。
HTTP_USER_AGENTの例| Mozilla/4.0 (compatible; MSIE 4.0; Windows 95) Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) Mozilla/4.0 (compatible; MSIE 5.01; Windows NT) Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Mozilla/4.0 (compatible; MSIE 6.0; Windows XP; DigExt) Mozilla/2.0 (compatible; MSIE 3.02; Windows CE) Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Mozilla/4.0 (compatible; MSIE 4.01; Mac_68000) |
"MSIE" という文字列が入っていても、Internet Explorer でない場合があります。それは Opera の場合です。Opera に関しては後述しております。
判断のルールとして、はじめに"Mozilla" が含まれており、さらに"Compatible"という文字列が含まれません。
ブラウザーバージョンは、"Mozilla/"の次にくる数字と判断できます。
プラットフォームは、"WinNT", "Windows NT 5.0", "Macintosh", "Linux", "SunOS", "HP-UX", "OSF1", "FreeBSD", "NetBSD", "IRIX" という文字列から判断できます。Unix系については、それぞれのOSを指す文字列の次にくる数字から判断できます。
ただ、私の知る限り、Netscapeの場合、Windows Me と判断することができないようです。Windows Me上でNetscape 4.7を使った場合、その User_Agent は、なんと
Mozilla/4.75 [ja] (Win95; U)
となってしまうではないか! どうやって、区別するんだろう?
HTTP_USER_AGENTの例| Mozilla/4.73 [ja] (Win95; U) Mozilla/4.76 [en] (Win98; U) Mozilla/4.7 [ja] (WinNT; I) Mozilla/4.73 [ja] (Windows NT 5.0; U) Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; m18) Gecko/20001108 Netscape6/6.0 Mozilla/2.02 [ja] (Macintosh; I; PPC) Mozilla/3.0 (Macintosh; I; 68K) Mozilla/4.61 [ja] (X11; I; Linux 2.2.13-33 i686) Mozilla/4.7 [ja] (X11; I; SunOS 5.8 sun4u) Mozilla/3.01 (X11; I; HP-UX B.10.20 9000/780) Mozilla/4.5 [ja] (X11; I; OSF1 V4.0 alpha) Mozilla/4.7C-ja [ja] (X11; I; FreeBSD 4.1-RELEASE i386) Mozilla/4.5 [ja] (X11; I; NCOS(NetBSD ver.) 1.3I-NCOS i386) Mozilla/3.01SGoldC-SGI [ja_euc] (X11; I; IRIX 6.3 IP32) |
Netscape 6 の場合、User-Agent に Netscape6 という文字列が含まれますので、簡単に判別可能です。例をご覧ください。
| Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:0.9.4) Gecko/20011019 Netscape6/6.2 Mozilla/5.0 (Windows; U; Win98; ja-JP; rv:0.9.4) Gecko/20011019 Netscape6/6.2 Mozilla/5.0 (Windows; U; Win 9x 4.90; ja-JP; rv:0.9.2) Gecko/20010726 Netscape6/6.1 Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:0.9.2) Gecko/20010726 Netscape6/6.1 Mozilla/5.0 (Macintosh; U; PPC; ja-JP; rv:0.9.2) Gecko/20010726 Netscape6/6.1 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.4) Gecko/20011022 Netscape6/6.2 |
おもしろいことに、Netscape 6 の場合だけ、"Mac OS X" の文字列が入ってきます。他のブラウザーでは、Mac の OS バージョンまで分かりませんでした。
Mozilla の場合、User-Agent に "Gecko" という文字列が含まれ、かつ、"Netscape" という文字列が含まれないという条件で判別可能です。Mozilla のエンジンが Netscape 6 に使われているため、User-Agent がほとんど同じです。"Netscape" という文字列があるかないかの違いだけです。
| Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.6) Gecko/20011120 Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.5) Gecko/20011011" "en-us Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:0.9.6) Gecko/20011120 Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:0.9.6) Gecko/20011120 Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:0.9.6) Gecko/20011121 |
Netscape 6 と同様、Mac OS X の場合には、"Mac OS X" の文字列が入ってきます。
Opera は、設定で User-Agent を変更することができます。しかし、Opera であることは判別可能です。Opera の User-Agent の設定は、メニューバーから [File] → [Preferences...] を選択して、設定画面を表示します。左側の設定メニューから Network を選択します。すると右上に、「Browser identification」という設定項目があります。ここの設定次第で、User-Agent が変わってしまうのです。

では、それぞれの設定で、どのような User-Agent になるかご紹介します。以下の例では、Windows 2000 で、Opera 6.0 を使って取得したものです。
| Browser identification 設定 | User-Agent |
| Identify as Opera | Opera/6.0 (Windows 2000; U) [en] |
| Identify as Mozilla 5.0 | Mozilla/5.0 (Windows 2000; U) Opera 6.0 [en] |
| Identify as Mozilla 4.76 | Mozilla/4.76 (Windows 2000; U) Opera 6.0 [en] |
| Identify as Mozilla 3.0 | Mozilla/3.0 (Windows 2000; U) Opera 6.0 [en] |
| Identify as MSIE 5.0 (デフォルト) | Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [en] |
ご覧頂いておわかりのとおり、どの設定でも必ず "Opera" という文字列は入ります。これで Opera であることが分かります。しかし、無条件で、"MSIE" という文字列が入っていることにより Internet Explorer と判別しないよう注意が必要です。
次に、Opera の場合の OS の区別なのですが、これも他のブラウザーとちょっと異なります。以下にそれぞれの OS における User-Agent をご紹介します。
| Operationg System | User-Agent |
| Windows XP | Mozilla/5.0 (Windows XP; U) Opera 6.0 [en] |
| Windows 2000 | Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [en] |
| Windows Me | Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 6.0 _ [en] |
| Windows 98 | Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.0 _ [en] |
| Mac OS 9.2 | Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) Opera 5.0 [en] |
| Linux | Mozilla/5.0 (Linux 2.4.2-2 i586; U) Opera 5.0 [en] |
他のブラウザーと異なり、Windows XP, ME, 2000 の場合には、注意が必要です。Opera の場合には、変換することなく、そのまま OS 名称が User-Agent に記載されています。
| DoCoMoの場合 |
"DoCoMo"という文字列が含まれることにより判断できます。例の"1.0"の部分がブラウザーバージョンです。また、"P209is"の部分が機種名です。最後の"c10"は、拡張キャッシュ情報です。機種により読み込める画面のサイズが異なり、その情報を送ってきます。"10"は、10Kバイトの画面を読み込むことができるという意味です。何もない場合は、デフォルトの5KBを意味するらしい。詳細は、DoCoMoのこちらのページをご覧ください。
HTTP_USER_AGENTの例
DoCoMo/1.0/P209is/c10
| Vodafone (旧J-PHONE)の場合 |
"J-PHONE"という文字列が含まれることにより判断できます。例の"2.0"の部分がブラウザーバージョンです。また、"J-DN02"の部分が機種名です。
HTTP_USER_AGENTの例
J-PHONE/2.0/J-DN02
J-PHONEの場合には、HTTP_USER_AGENT以外にも、多数の環境変数を返すようです。
・ HTTP_X_JPHONE_MSNAME
・ HTTP_X_JPHONE_DISPLAY
・ HTTP_X_JPHONE_COLOR
・ HTTP_X_JPHONE_SOUND
| au、TU-KAの場合 |
残念ながらHTTP_USER_AGENTのみで、決定的な判別方法がありません。"UP.Browser"という文字列が含まれていれば、auもしくはTU-KAと判断してしまうしかありません。"UP.Browser"とは、Openwave Systems Inc.(旧phone.com社)がライセンスするブラウザーで、世界的に見ればau、TU-KAのみが使っているわけではありません。しかし、日本国内においては、ほぼau、TU-KAとみなしてもさほど問題かもしれません。(一部の機種で、DoCoMoも採用しているようです)
ただ、REMOTE_HOSTから判断することが可能です。auの場合、かならず、Proxy経由でのアクセスとなりますので、ROMOTE_HOSTに、"ezweb.ne.jp", "ido.ne.jp"が含まれていれば、auと判断できます。
さて、au, TU-KA の場合、USER_AGENT は 2 種類存在します。au の cdmaOne 3000, 5000 シリーズの場合ですと、"KDDI" という文字列があるかどうかで判別します。なければ、au の cdmaOne 200, 300, 400, 1000 シリーズもしくはデジタル,ツーカーと判別できます。それぞれで、USER_AGENT の文字列を分解する必要があります。以下に、その例を挙げます。
■HTTP_USER_AGENTの例(au[cdmaOne3000,5000シリーズ]の場合)
KDDI-TS21 UP.Browser/6.0.2.273 (GUI) MMP/1.1
"6.0.2.273" の部分がブラウザーバージョンです。そして "TS21" の部分が Device ID です。世の中で知れ渡っている機種名でないことに注意してください。読み替えなければいけないのです。詳細は、Openwave Systems Inc. が公開している Mobile Borwser 携帯電話リストをご覧下さい。また、KDDI のサイトでも技術情報コーナーで USER_AGENT の情報を公開しております。
■HTTP_USER_AGENTの例(au[cdmaOne200,300,400,1000シリーズ,デジタル,ツーカー]の場合)
UP.Browser/3.04-MA11 UP.Link/3.2.2.7c
"3.04"の部分がブラウザーバージョンです。"MA11"の部分が Device ID です。
UP.Browserの場合には、HTTP_USER_AGENT以外にも、多数の環境変数を返すようです。
・ HTTP_X_UP_SUBNO
・ HTTP_X_UP_UPLINK
・ HTTP_X_UP_DEVCAP_SCREENCHARS
・ HTTP_X_UP_DEVCAP_SCREENPIXELS
・ HTTP_X_UP_DEVCAP_SCREENDEPTH
・ HTTP_X_UP_DEVCAP_MSIZE
・ HTTP_X_UP_DEVCAP_ISCOLOR
・ HTTP_X_UP_DEVCAP_NUMSOFTKEYS
・ HTTP_X_UP_DEVCAP_SOFTKEYSIZE
・ HTTP_X_UP_DEVCAP_MAX_PDU
・ HTTP_X_UP_DEVCAP_SMARTDIALING
・ HTTP_X_UP_DEVCAP_IMMED_ALERT
・ HTTP_X_UP_FAX_LIMIT
・ HTTP_X_UP_FAX_ACCEPTS
・ HTTP_X_UP_FAX_ENCODINGS
| ASTEL ドットiの場合 |
ASTEL という文字列が入っていることで判別できます。
HTTP_USER_AGET の例
ASTEL/1.0/J-0511.00/c10/smel
| ドリームキャスト |
"DreamPassport"という文字列から判断できます。
HTTP_USER_AGENTの例
Mozilla/3.0 (DreamPassport/3.0)
| WebTV |
"WebTV"という文字列から判断できます。
HTTP_USER_AGENTの例
Mozilla/3.0 WebTV/1.2 (compatible; MSIE 2.0)
| ZAURUS |
"sharp pda browser"という文字列から判断できます。"MT-300"の部分が機種名です。
HTTP_USER_AGENTの例
sharp pda browser/4.5[ja](MT-300/1.0)
| DoCoMo BrowserBoard |
"sharp pda browser"かつ"BrowserBoard"という文字列から判断できます。
HTTP_USER_AGENTの例
sharp pda browser/4.5[ja](BrowserBoard/1.0)
以上のことを踏まえ、HTTP_USER_AGENTとREMOTE_HOSTから、プラットフォーム、プラットフォームバージョン、ブラウザー、ブラウザーバージョンを判別するスクリプトを作ってみました。