PR
Q 質問 WWWサイトにアクセスしてきたブラウザの種類を自動識別し,パソコンや携帯電話,PDAなどに適した形式でページを表示したい。

A 回答 ブラウザの種類はHTTPヘッダーの“User-Agent”で識別できます。ページを切り替えるには,タグの属性を切り替える,リダイレクトさせる,などの方法があります。


 パソコンや携帯電話,PDAなどが備えるWWWブラウザがWWWサーバーにページを要求する際はHTTPと呼ぶプロトコルを使ってリクエストを送信します。HTTPのリクエストには様々な情報を格納したヘッダーが付いていますが,ブラウザの種類に関する情報も含まれています。

図1●WWWブラウザの情報はHTTPのリクエストに付いてくる
どの種類のWWWブラウザからアクセスしているかは,送られてくるHTTPのリクエスト・ヘッダーに含まれている“User-Agent”という項目に入っている文字列を調べれば特定できる
 「User-Agent」と呼ぶ項目には,どんなブラウザがリクエストを送信したかという情報が格納してあり,例えばInternet Explorer(IE)であれば“Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)”,iモードであれば“DoCoMo/1.0/SO503i/c10”などの文字列が入っています(図1[拡大表示])。

 このUser-Agentの情報をサーバー側で調べればブラウザを識別できます。識別することで,(1)ブラウザのメーカー間の非互換性,(2)コンテンツ記述言語の違い,(3)端末の画面サイズの違い,などに応じて最適なページを表示させることが可能です。(1)の非互換性は,IEとNetscape Navigator(NN)でサポートしているHTMLタグやJavaScript,CSS(Cascading Style Sheets),DynamicHTMLなどが異なることが知られています。IEとNNの間だけでなく,同じ製品でもバージョンや稼働OSの違いによって異なってきます。 

 また,携帯電話はパソコンと比べて画面のサイズが小さいほか,取得できるページのサイズにも制限があります。さらに,コンテンツ記述言語もiモードはCompactHTML,J-スカイはMML(Mobile Markup Language),EZwebはHDML(Handheld Device Markup Language)と異なります。

変数を使ってタグを制御する

 では,ブラウザの種類を識別してページを切り替えてみましょう。まず,ヘッダーに含まれるUser-Agentからブラウザの情報を取得します。米MicrosoftのASP(Active Server Pages)では,組み込みオブジェクトのRequestオブジェクトを利用するのが便利です。具体的には「Request.ServerVariables("HTTP_USER_AGENT")」と記述します。またCGI(Common Gateway Interface)プログラムでは,環境変数から取得可能です。

 後は取得した文字列を調べ,ブラウザの種類に応じたロジックを記述します。表示形式を切り替える方法は,(1)動的にページを生成する,(2)ブラウザごとに用意したページを表示させる,という方法があります。

図2●WWWブラウザの種類によって表示形式を変えるASPの例
例えばHTMLタグの属性情報を変数化しておき,アクセスしてきたWWWブラウザの種類に合わせて適切な値を代入する。これにより,画像の大きさや表の幅,1行の文字数といった表示形式を変えられる
 (1)の方法で端末の画面サイズに合わせて最適化する場合,タグの属性情報を変数化しておくのが便利です。例えば画像のサイズを変える場合,ASPで,“<IMG ・・・ width=<%=ImageWidth%>”とし,画面サイズに応じて変数ImageWidthに適切な値を代入します(図2[拡大表示])。

別ファイルのパスへリダイレクト

 (2)の方法では,ページを表示するためのファイルをブラウザの種類ごとに用意します。識別したブラウザに合ったファイルのパスを通知してリダイレクトさせます。

 ASPでは,ブラウザからのリクエストをリダイレクトするメソッド「Response.Redirect"URL"」を提供しています。URLの部分に,ブラウザや端末の種類に応じて用意したファイルのパスを指定します。CGIプログラムならば,「Location:URL」というヘッダーをブラウザへ返信すればリダイレクトします。ただし,ブラウザによってはリダイレクトを使えないことも考えられます。その場合は,先に説明した方法などを用いてサーバー側のプログラムで端末に応じたページを動的に生成する必要があります。

(本誌)