■ HTTP
さてさて、ネット君。WWWの3つの技術のうち2つ説明したわけだな。
リソースの場所を特定するURIと、WWW向けハイパーテキストの記述言語HTMLですね。
うむ。場所の特定と、リソースの記述方法だったわけだ。
最後の1つが、リソースの転送方式である、HTTPだ。
はいぱーてきすととらんすふぁーぷろとこる、でしたね。
そうだ。
さて、
うわ、昔話だ。
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サーバアプリケーションはApacheやIISなどだな。
ふむふむ。
ユーザエージェントとWebサーバアプリケーション間でのやり取りはこのようになる。
[Figure71-01:ユーザエージェントとサーバアプリケーション]
はぁ、ごく普通ですね。
いやいや、ここでのポイントは。よく「Webページを見る」という表現を使うことから、「サーバ上にあるページ(HTMLファイル)を見ている」と勘違いしないように、ということだ。
あ〜、よく言いますよね、「ページを見る」って。
サーバ上のページを見ているわけではないってことですか。
そう、あくまでもページをダウンロードしてきてから見ているということだ。ダウンロードされたファイルは一時的に保存され、それを表示している。
ページを見るっていうと、確かに勘違いしやすいかも。
■ 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 | 対応バージョン |
---|---|
GET | HTTP/0.9 |
HEAD | HTTP/1.0 |
POST | HTTP/1.0 |
PUT | HTTP/1.1 |
DELETE | HTTP/1.1 |
OPTIONS | HTTP/1.1 |
TRACE | HTTP/1.1 |
CONNECT | HTTP/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はリクエストにデータをつけて送る場合に使う。