3 Minutes NetWorking
No.71

3Minutes NetWorking

第71回HTTP(2) リクエストヘッダ

■ HTTP

インター博士

さてさて、ネット君。WWWの3つの技術のうち2つ説明したわけだな。

ネット助手

リソースの場所を特定するURIと、WWW向けハイパーテキストの記述言語HTMLですね。

インター博士

うむ。場所の特定と、リソースの記述方法だったわけだ。
最後の1つが、リソースの転送方式である、HTTPだ。

ネット助手

はいぱーてきすととらんすふぁーぷろとこる、でしたね。

インター博士

そうだ。
さて、Long Long ago(むかしむかしのそのむかし).

ネット助手

うわ、昔話だ。

インター博士

WWWというシステムが開発された。1989年の事だ。
この時点で開発されたHTTPは、HTTP/0.9と呼ばれるHTTPで現在のHTTPの基礎になったものだ。

ネット助手

う〜。博士、語ると長いからなぁ

インター博士

HTTP/0.9が始まりのHTTPだが、このHTTPは各ベンダが必要に応じて好き勝手に拡張してしまった。
標準の必要性に駆られたIETFは、1996年、HTTP/1.0を規定する。RFC1945だ。 ▼ link

ネット助手

あ〜、いつ終わるんだろ

インター博士

実際、Webサーバアプリケーションが最低限対応しないといけないのはHTTP/1.0だ。
HTTPはさらに拡張され、1997年HTTP/1.1が規定される。RFC2616だ。 ▼ link

ネット助手

まだかな〜。

インター博士

もともとのHTTPは、ハイパーテキストの転送という役割のために作られたプロトコルだが、現在では拡張によりそれ以外の用途にも使える汎用転送プロトコルと化しているのが実情だ。

ネット助手

ふあ〜ぁ。

インター博士

例えば、WebDAVなどでは、ファイルのアップロードなども出来るようになり、FTPと大差がなくなっている。 ▼ link
……ネット君?

ネット助手

……。Zzzzz。

インター博士

ネット君ッ!!

ネット助手

は、ははははは、はいッ!!

インター博士

ふむ。よほど命が惜しくないとみえる
ネット君。命は大事に使ったほうがいいぞ。うまく使えば一生持つ。

ネット助手

ははははいッ。確かにそうですねっ。

インター博士

まぁ、寝ていても起きていても大差ないのがネット君だから、寝ていた事に関しては文句を言わないでおこう。
いや、寝ていた方がマシかもしれんな。

ネット助手

うぅぅぅ。

インター博士

ともかくだ。HTTPはHTTP/1.0を基本として、HTTP/1.1で拡張された形になっている。
今後説明していくのはHTTP/1.1を基本としていく。

ネット助手

ん〜、拡張によってHTTPがFTPみたいな事ができるんなら、どうやって区別すればいいんですか?

インター博士

そうだな。FTPはファイル交換HTTPは情報交換ってところかな。
FTPはファイルというリソースの交換の全般的な機能を持っている。HTTPは汎用的な情報交換プロトコルって形だ。

ネット助手

いまいち違いが…。

インター博士

ファイル交換に限って行うならばFTPの方が断然有効だ。そのための機能を十二分に持っている。
HTTPはそれ以外、例えばこちらから送ったデータに応じて、応答のデータを変えたりすることもできる。例えば、BBSなどがそうだな。

ネット助手

ファイルの交換に専門化したFTP。いろいろな機能をもつHTTP、ってことでいいんですかね?

インター博士

そうだな。そんなに間違ってないからそれでいいだろう。

ネット助手

了解です。

■ UAとサーバアプリケーション

インター博士

さて、このHTTPだが。
クライアント・サーバシステムである。

ネット助手

要求するクライアントと、応答するサーバですね。
クライアントがブラウザ、サーバがWebサーバアプリケーションでしたっけ。

インター博士

うむ。よって、対応したブラウザさえ入っていれば機種・OSを選ばない

ネット助手

FTPと同じですね。

インター博士

そうだな。Windows、Unix、MacOSはもちろんのこと、携帯電話、モバイル機器、果てはワープロとか、家電とかでもOKだ。
このブラウザのことを、HTTPではユーザエージェントという。

ネット助手

ゆーざえーじぇんと。

インター博士

うむ、ユーザエージェント(UA)はブラウザの他、検索エンジンなどで使用されるロボットなどがこれに含まれる。
もう一方は、Webサーバだな。

ネット助手

Webサーバアプリケーションが実行されているマシンですね。

インター博士

うむ。有名なWebサーバアプリケーションはApacheIISなどだな。

ネット助手

ふむふむ。

インター博士

ユーザエージェントとWebサーバアプリケーション間でのやり取りはこのようになる。

[Figure71-01:ユーザエージェントとサーバアプリケーション]

ネット助手

はぁ、ごく普通ですね。

インター博士

いやいや、ここでのポイントは。よく「Webページを見る」という表現を使うことから、「サーバ上にあるページ(HTMLファイル)を見ている」と勘違いしないように、ということだ。

ネット助手

あ〜、よく言いますよね、「ページを見る」って。
サーバ上のページを見ているわけではないってことですか。

インター博士

そう、あくまでもページをダウンロードしてきてから見ているということだ。ダウンロードされたファイルは一時的に保存され、それを表示している。

ネット助手

ページを見るっていうと、確かに勘違いしやすいかも。

■ HTTPメッセージ

インター博士

さてさて、そのHTTPで送られるリクエストとレスポンスだが。
このようになっている。

HTTPメッセージ

[Figure71-02:HTTPメッセージ]

ネット助手

開始行、メッセージヘッダ、メッセージ本体の3部構成ですか。
CRLFってなんです?

インター博士

CRLFは改行を意味する。この場合、CRLFはヘッダの終了を意味するわけだ。
なお、メッセージヘッダは省略可能だ。HTTP/0.9にはなかった部分だな。

ネット助手

へぇ。HTTP/1.0以降のものですか。

インター博士

うむ。つまりHTTPメッセージは、開始行 + CRLF + 本体か、開始行 +(メッセージヘッダ + CRLF)+ CRLF +本体、ということだ。

ネット助手

メッセージ本体の前には必ずCRLF。ヘッダがあったらヘッダの終わりにもCRLFってことですね。

インター博士

そういうことだ。さらに、開始行の終わりにもCRLF、ヘッダはいくつか複数個つくこともあるので、各ヘッダの終わりにもCRLFだ。

ネット助手

うう?

インター博士

つまり、もうちょっと分解して書くと…。

リクエストメッセージ

[Figure71-03:リクエストメッセージ]

レスポンスメッセージ

[Figure71-04:レスポンスメッセージ]

インター博士

このような形になる。
開始行の終わりにCRLF、各ヘッダの終わりにCRLF、HTTPヘッダ(開始行+メッセージヘッダ)の終わりにCRLFだ。

ネット助手

う、う〜ん。何がなにやら。

インター博士

まぁ、順番に説明していこう。

■ リクエスト・開始行

インター博士

リクエストの開始行は、メソッド、リクエストURI、HTTPバージョンから成る。
意味はこうだ。

  • メソッド … リクエストしたファイルに対する動作
  • リクエストURI … リクエストするファイルのURI
  • HTTPバージョン … クライアントが使用できる最も高いHTTPのバージョン
インター博士

さて、上から順番に説明していきたいところだが、メソッドについてはあとで話すとして。
まず、リクエストURI。これは要求するファイルの場所を特定する。例えば。

ファイルの配置

[Figure71-05:ファイルの配置]

インター博士

www.3min.co.jpというWebサーバには、ホームディレクトリには2つのファイルと2つのディレクトリがあり、各ディレクトリにはファイルが1つあるとする。

ネット助手

はい。

インター博士

ブラウザで見たいファイルのURIを指定するのだが、その場合開始行のリクエストURIには以下のように記述される。

ブラウザ上のURIリクエストURI
http://www.3min.co.jp//
http://www.3min.co.jp/index.html/index.html
http://www.3min.co.jp/title.gif/title.gif
http://www.3min.co.jp/ex//ex/
http://www.3min.co.jp/ex/extra.html/ex/extra.html
http://www.3min.co.jp/30min/01.html/30min/01.html
ネット助手

は〜。ドメイン名の後ろのスラッシュ以降がすべて書かれるわけですね。

インター博士

そうだ。つまりホームディレクトリからの絶対パスを記述するわけだな。

ネット助手

相対パスでは駄目なんですか?

インター博士

駄目だ。絶対パスのみだ。
または、URIを直接記述する場合や、*(アスタリスク)を書く場合もある。それは後で説明しよう。

ネット助手

ははぁ。

インター博士

次はHTTPメッセージ。これはUAが使用可能な最も高いHTTPのバージョンを送る。
意味はこう。

  • HTTP/ メジャーバージョン.マイナーバージョン
ネット助手

HTTP/1.1は、メジャーバージョン1、マイナーバージョン1ってことですね。

インター博士

そうだ。メジャーバージョンはメッセージ形式などが変わった場合、マイナーバージョンは拡張などがなされた場合変わる。
現在では、HTTP/0.9、HTTP/1.0、HTTP/1.1の3種類しかないがな。

ネット助手

はー。それでわざわざ開始行にHTTPのバージョンを入れるのは何故ですか?

インター博士

うむ。これを使って、サーバに使用するHTTPバージョンを通知する役割を担うのだよ。
これにより、より高いバージョンでの転送が可能になる。

ネット助手

もし、サーバかクライアント、どちらかが低いバージョンだったら?

インター博士

そのときは、新しいバージョンで拡張された機能は使えず、古いバージョンで転送することとなる。

ネット助手

なるほど。

■ メソッド

インター博士

さて、メソッドだが。
これは、リクエストURIで指定したファイルに対する動作を規定する。以下のようなものがある。

Method対応バージョン
GETHTTP/0.9
HEADHTTP/1.0
POSTHTTP/1.0
PUTHTTP/1.1
DELETEHTTP/1.1
OPTIONSHTTP/1.1
TRACEHTTP/1.1
CONNECTHTTP/1.1
ネット助手

はわ〜。一杯ありますね。

インター博士

うむ。特に大事なのは、上の3つ、GET、HEAD、POSTだ。

ネット助手

HTTP1.1以前からあるメソッドですね。

インター博士

うむ。まず、GET。最も使われるメソッドだな。
意味はリクエストURIに指定されたファイルを要求する、だ。

ネット助手

は〜。普通のWebページの要求ですね。

インター博士

そういうことだ。もっとも基礎といっていいだろう。
次はHEAD。基本的にはGETと変わらない。

ネット助手

ということは、リクエストURIに指定されたファイルを要求する?

インター博士

そうだ。ただしメッセージ本体にデータを入れてはいけないという条件つきだ。

ネット助手

????
メッセージ本体にデータがないってことは、開始行とメッセージヘッダしかなくなってしまいますよ?

インター博士

そういうことだな。つまり、ヘッダのみ要求する時につかう。

ネット助手

ヘッダのみの要求?
なんかそれって意味があるんですか?

インター博士

もちろんある。それについては先で話そう。
そして、POST。要求メッセージのメッセージ本体にデータを入れて送る時に使う。

ネット助手

ん?
GETやHEADの時は、メッセージ本体にデータはないんですか?

インター博士

必要ないだろう?
リクエストURIのファイルを下さい(GET)。他に書くことは?

ネット助手

う、う〜ん。ないかな。

インター博士

うむ。だがPOSTはメッセージ本体にデータを入れることができる。
一般的には掲示板などのCGIで使用される。

ネット助手

ははぁ。

インター博士

他のメソッドについてはまた先で話そう。
まずは、GET、HEAD、POSTを覚えてくれ。

ネット助手

あ、はい。

インター博士

さて。まとめると、リクエストの開始行は以下の例のような形になる。

  • GET / HTTP/1.1 (CRLF)
  • GET /index.html HTTP/1.1 (CRLF)
  • HEAD /ex/extra.html HTTP/1.1 (CRLF)
  • POST /bbs/bbs.cgi HTTP/1.1 (CRLF)
インター博士

メソッド、リクエストURI、HTTPバージョンの間は空白を入れることで区別することを忘れないように。
あと、終わりに改行(CRLF)がつくこともな。

ネット助手

了解です。

インター博士

さて、今回はこれぐらいにしておこう。
次回はレスポンスメッセージの開始行の話からはじめよう。

ネット助手

いぇっさ〜。
3分間ネットワーキングでした〜♪

WebDAV
[Web-based Distributed Authoring and Versioning]
WWWを使用した分散環境での編集・バージョン管理機能。RFC2518で規定。
読みは「ウェブダヴ」。
使うためにはサーバ・クライアント双方の対応が必要で、IIS5.0かApache2.0、IEなどが対応。
詳しくは先の回で。
BBS
[Bulletin Board System]
いわゆる掲示板。メンバが自由に書き込め・読むことの出来る共有メッセージボード。
多くの場合、CGIなどで運用されている。
ユーザエージェント
[User Agent]
「UA」と略される。
ロボット
[Robot]
自動でWWWを巡回し、Webページを収集してまわるプログラムで、検索エンジンなどで使用されている。
また、最近は個人用のものもあり、この場合単に「エージェント」(巡回エージェント)などと呼ばれる。
ブラウザとの違いは、ブラウザは「人間にわかるようHTMLを解析・表示」するが、ロボットはしない、という点。
Webサーバ
[Web Server]
もしくはWWWサーバとも呼ばれる。
Apache
読みは「アパッチ」。
フリーのサーバアプリケーションで、UNIX系OSでよく使われている。(Windows版もある)
Webサーバとしてはもっとも使われている。
IIS
[Internet Information Service]
Windows2000以降がデフォルトでもつサーバアプリケーション。
Web、FTP、SMTPが統合したサーバアプリでもある。
なお、Windows NTでは同じIISでもInternet Information "Server"なので注意(中身は変わらない)。
一時的に保存
Windows + InternetExplorerでは、「C:\Documents and Settings\(ユーザ名)\Local Settings\Temporary Internet Files」に保存されます(Windows2000・XPでデフォルト設定時。変更可能)
ホームディレクトリ
[Home Directory]
ApacheではDocumentRootと呼ばれる、そのWebサーバの一番上(ルート)のディレクトリ。
そのWebサーバ内すべてのファイルとフォルダはこの下に(仮想的に)配置されることとなる。
絶対パス
[Absolute Path]
最上位(ルート)ディレクトリから対象ファイルの場所を記述する方式。
反対語は相対パス[Relative Path]で、現在のディレクトリから見た位置を書く方式。
ネット助手ネット君の今日のポイント
  • HTTPはハイパーテキスト転送用プロトコルである。
  • 現在ではその便利さから汎用転送プロトコルとして使われている。
  • HTTPはユーザエージェントとWebサーバアプリケーション間のデータ転送である。
  • HTTPメッセージは開始行、メッセージヘッダ、メッセージ本体からなる。
  • リクエストメッセージの開始行は、メソッド、リクエストURI、HTTPバージョンからなる。
  • メソッドはリクエストURIで指定されたファイルへの動作を示す。
    • GETはそのファイルを要求する。
    • HEADはそのファイルの要求だが、メッセージヘッダのみを受け取る。
    • POSTはリクエストにデータをつけて送る場合に使う。

3 Minutes NetWorking No.71

管理人:aji-ssz(at)selene.is.dream.jp