環境変数 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 が変わってしまうのです。

Opera 設定メニュー

では、それぞれの設定で、どのような 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の場合

"DoCoMo"という文字列が含まれることにより判断できます。例の"1.0"の部分がブラウザーバージョンです。また、"P209is"の部分が機種名です。最後の"c10"は、拡張キャッシュ情報です。機種により読み込める画面のサイズが異なり、その情報を送ってきます。"10"は、10Kバイトの画面を読み込むことができるという意味です。何もない場合は、デフォルトの5KBを意味するらしい。詳細は、DoCoMoのこちらのページをご覧ください。

HTTP_USER_AGENTの例
DoCoMo/1.0/P209is/c10

 

J-PHONE 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 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 ASTEL ドットiの場合

ASTEL という文字列が入っていることで判別できます。

HTTP_USER_AGET の例

ASTEL/1.0/J-0511.00/c10/smel
?h???[???L???X?g ドリームキャスト

"DreamPassport"という文字列から判断できます。

HTTP_USER_AGENTの例
Mozilla/3.0 (DreamPassport/3.0)
WebTV WebTV

"WebTV"という文字列から判断できます。

HTTP_USER_AGENTの例
Mozilla/3.0 WebTV/1.2 (compatible; MSIE 2.0)
ZAURUS ZAURUS

"sharp pda browser"という文字列から判断できます。"MT-300"の部分が機種名です。

HTTP_USER_AGENTの例
sharp pda browser/4.5[ja](MT-300/1.0)
DoCoMo BrowserBoard DoCoMo BrowserBoard

"sharp pda browser"かつ"BrowserBoard"という文字列から判断できます。

HTTP_USER_AGENTの例
sharp pda browser/4.5[ja](BrowserBoard/1.0)

以上のことを踏まえ、HTTP_USER_AGENTとREMOTE_HOSTから、プラットフォーム、プラットフォームバージョン、ブラウザー、ブラウザーバージョンを判別するスクリプトを作ってみました。

実験

戻る

会社案内 | 特定商取引法に基づく表示 | プライバシーポリシー | 当サイトへのリンクについて | お問い合わせ