2006 年 8 月 26 日 21 時 8 分

ユーザエージェントの要求


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


今度は逆に、ユーザエージェントが送信した内容を見てみよう。

Web サイトへのアクセスには Web ブラウザを利用したが、
利用者が Web ブラウザ上で入力したのは、
http://www.efc-editor.org という URL だけだが、
実際には多数のデータが送信されていることが分かる。

    GET / HTTP/1.1

クライアントのリクエストでも、最初の行は特別だ。
この行はリクエスト行と呼ばれ、3 つの要素が含まれる。

最初の「GET」はメソッドと呼ばれ、
リクエストがどのような種類のものかどうかを表す。
GET はサーバにデータの要求を行う最も一般的な手法だ。
他にも、POST や HEAD、OPTIONS といったものがある。

そして、空白に続く「/」は絶対パスとパラメータとなる。
これは URL からスキームとホスト名を除いたものだ。
絶対パスの最初は必ず記号 / から始まるので、
この部分には最低 1 文字の / は含まれる。

例えば、mixi の俺のプロフィールページの場合、
「/show_friend.pl?id=2300658」となる。

そして、空白に続く「HTTP/1.1」は、サーバの時と同じで、
ユーザエージェントがこの通信に使っている、
HTTP のバージョンを表している。

サーバはこのバージョンを確認することによって、
ユーザエージェント側の HTTP バージョンにあわせて、
返信に使う HTTP のバージョンを切り替えることができる。

リクエスト行も、CR-LF の 2 文字で終端する。

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
    Accept-Language: ja,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
    Host: www.rfc-editor.org
    Proxy-Connection: Keep-Alive
    X-ProcessAndThread: iexplore.exe [2184; 1616]

2 行目以降空行までは、サーバ同様ヘッダ行であり、
要求に関する追加情報(リクエストヘッダ)や、
本体に関するメタ情報(エンティティヘッダ)が含まれる。

HTTP では、クライアントがデータを送ることもでき、
その場合は送信内容に本体データが含まれ、
ヘッダを利用して本体に関する情報を渡すことができる。
このあたりは、後々、フォーム送信のところで解説する。

Accept や Accept-Language、User-Agent などは、
代表的なリクエストヘッダである。
表示の都合で折り返されているかもしれないが、
それぞれ厳密に 1 行のヘッダだ。

Accept は、ユーザエージェントが処理可能な、
MIME タイプを並べて指定し、サーバに通知する。
Accept-Language は、処理可能な言語を指定する、
そして、User-Agent は、ユーザエージェントの
ソフトウェアの種類やバージョンを通知するのに利用する。

サーバはこれらのヘッダを受け取り、
クライアントに最適なデータを選択して送信する事ができる。
つまり、URI は特定のファイルを示すとは限らないのだ。

例えば、http://support.microsoft.com は、
マイクロソフトのサポート Web サイトだが、
Accept-Language ヘッダの内容によって、
送り返す HTML の言語が変化するようになっている。

ja であれば日本語で表示され、en であれば英語になる。
また、en-US なら米語になるかもしれない。
まあ、どこまで要求を遵守するかはサーバの裁量次第だ。

最近の Web ブラウザは言語の設定が可能なので、
上記のようなサーバにアクセスした場合は、
自動的に自分の言語にあわせて表示される。

そして、Host ヘッダには URL として入力した、
「www.rfc-editor.org」という文字列が入っている。
Web ブラウザは、利用者が指定した URL を解析し、
パス以降はリクエスト行として、
ホスト名は Host ヘッダとして送信しているのだ。

ユーザエージェントが送信するヘッダ行も可変なので、
最後に空行を追加することで、ヘッダ行の終端を示す。

今回のサンプルでは、HTTP メソッドは「GET」なので、
この場合、本体に相当するデータは存在しないので、
送信するデータはリクエスト行とヘッダ行だけだ。

そのため、送信データの最後には、改行が 2 つある。
最初の改行は X-ProcessAndThread ヘッダの終端で、
最後の改行がヘッダ行の終端を表している。

このように、HTTP の先頭行やヘッダ行において、
改行は重要な意味を持っており、
1 つの改行は CR-LF の 2 文字と厳密に決まっている。

Web サーバが UNIX であろうが Mac OS 9 だろうが、
先頭行やヘッダ行の改行には CR-LF が使われるのだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.