HTTP通信とはなんでしょう?

What's HTTP?
HTTP(Hyper-Text Transfer Protocol)とは通信プロトコルの一種です. これは"リンク"というページ間を移動する機能を備えた文書,いわゆるHTML(Hyper-Text Markup Language)を送受信するために考えだされたプロトコルです. このWebページもHTMLで出来ており,HTTP通信によって受信できたものです. 今回はこのプロトコルを少し解剖してみます. すると次のような簡単な仕組みであることがわかります.

通信手順

1

HTTP通信は,使い手(クライアント)がページ保有者(サーバー)に,”あなたの持っているHTML文書が読みたいです”という手紙を送ることから始まります. この手紙をリクエスト(英語で要求の意)と呼ぶことにします。
2

HTTP要求がサーバーに届きました。サーバーはこの要求の安全性を確かめ通信経路を確保します. 問題がなければこの手紙(要求)に返信をする準備を始めます.
3

たった今サーバーがクライアントへ返信を送っているところです. この返信をレスポンス(英語で反応の意)と呼ぶことにします. レスポンスには通信の状態が記されています. よく見ると返信に添付があります. この添付はクライアントがサーバーへ読みたいと要求していたHTML文書です. 添付として返信と同時に送ってくれるのです.
4

クライアントに返信(レスポンス)とHTML文書が届きました. レスポンスに記されている通信の状態を確認します. もし”問題あり!”と記されていたら,クライアントは画面にその旨を表示します. 今回は”すべて順調!”と記されていたようなので,HTML文書が画面に表示されます. この表示されたHTML文書こそ,私たちが目にするWebページなのです.
HTTP通信のやりとりは,上述した4ステップの手順(この手順を総称してプロトコルと呼びます)を踏むだけです. 手紙のやりとりだけなので簡単ですね. ちなみに,HTTP通信では"クライアント側が最初に手紙を送る"と決まっています. なのでHTTP通信の最初にサーバーが手紙を出すことはありません. 通信のきっかけとなる最初の手紙は必ずクライアントが出すのです. こだまと同じで,返ってきて欲しい言葉(HTML文書)を自分(クライアント)から山(サーバー)へ叫べば,間に障害物が無い限り,何も問題無くちゃんと返事が返ってくるようなものです.
日頃のインターネットブラウジング. HTML文書とはWebページの設計図のことです. 私達がURLを入力する→検索する→リンクをクリックしてページ間を移動するたびに,この手順通りのHTTP通信 が行われています. そうでなければWebページを表示することはおろか,貰うことも出来ません. ページの設計図であるHTML文書をサーバーから毎回貰い,ブラウザがその設計図を組み立てる(この処理をレンダリングと呼ぶ)ことをしているのです.

リクエスト = クライアントの要求

リクエストをもう少し詳しく見てみます. HTTP通信の手順を見てみると手順1の図中に,
GET / HTTP/1.1
と記されています. これが手紙(リクエスト)の内容です. HTTP通信の頭となる部分なのでヘッダーと呼びます. このヘッダーには,次に紹介する3つのメッセージが記されています.

1つ目のメッセージ: メソッド

サーバーに手紙を送ると,サーバーから希望のHTML文書が返信と共に返ってくる. これがHTTP通信の基本です. この基本的な通信方法をGETメソッドと呼びます. というのも,HTTP通信にはGETの他に,いくつかの通信方法(英語でメソッドと言う)が用意されているのです.
  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • CONNECT
  • TRACE
  • OPTION
この中で日頃お世話になっているのが,前述のGETメソッドと,これから紹介するPOSTメソッドです. 他6つの方法(メソッド)は,サーバーの管理者や開発者向けのメソッドなので一般のユーザーが使うことはほとんどありません. POSTメソッドとは,手順1で送る手紙に,追加でサーバーに知らせたい情報を添付できるメソッドです. 例えばこれはWebアンケートに使えます. アンケートに解答すると,その解答に応じたページが表示されるWebサイトがあるとします. POSTで通信すると,アンケートの解答を手紙(要求)に添付してサーバーへ送ることができるようになります. そうすれば,その添付を見たサーバーは,添付の内容(アンケートの解答)に基づいたHTML文書を返せるわけです. 今までに紹介したGETメソッドでは,最初の手紙に添付を付けることは出来ませんでした. GETはただページを貰いたい時に使うメソッド,POSTは何か最初にサーバーへ知らせたいメッセージがある場合に使うメソッド,と使い分けると良いわけです.

2つ目のメッセージ: ディレクトリ

ヘッダー2つ目のメッセージはGETの後ろにある"/ (スラッシュ)"です. これはクライアントが見たいと希望するHTML文書の所在地(ディレクトリ)を表します. サーバー自体の住所を/としていますから,例えばクライアントがあるサーバー中のフォルダPagesにある文書index.htmlを見たいと思ったら,次のようなヘッダーを持つ手紙をサーバーへ送るわけです.
GET /Pages/index.html HTTP/1.1
これだけです. この場合は"GETメソッドでフォルダPages中のindex.htmlを読ませてください"というメッセージになります. この手紙を受け取ったサーバーは,文書の所在を確認し,確かに存在すれば返信とともにその文書をクライアントへ返すのです.

3つ目のメッセージ: バージョン番号

3つ目の情報はバージョン番号です. HTTP/1.1という文字列は"HTTPのバージョン1.1で通信してください"という意味のメッセージ. HTTPにはいくつかのバージョンがあるので,その中のどれで通信をしようとしているのかサーバーへ知らせるのです. バージョンによっては通信の手順(正しくはプロトコル)が異なる場合があるので,正しく通信出来なくなります. このように,互いにどのような通信をするべきかを合わせているのです. サーバーはこのヘッダーを読むことで,クライアントの希望する文書を返信出来るのです.

レスポンス = サーバーの返答

サーバーからの返答であるレスポンスには,通信の状態が記されています. この状態(ステータス)は3ケタの数字で表されます. 状態を表す数値なのでステータスコードと呼ばれます. 例えば200なんかがステータスコードです. 手順3の図中に,
HTTP/1.1 200 OK
とあります. はじめに書かれている"HTTP/1.1"はリクエストと同じ意味で,"HTTPのバージョン1.1で通信するよ"という意味です. リクエストとレスポンスで同じバージョンを使うので上手く通信が出来るのです. その次に200とあります. これがステータスコードです. ステータスコードと状態の内容には次のような対応があります.
  • 100番台: 通信状態だけが返信されたことを意味します.
  • 200番台: 通信が成功したことを意味します.
  • 300番台: 追加ですべき処理があることを意味します.
  • 400番台: リクエストに問題があったことを意味します.
  • 500番台: サーバーに問題があったことを意味します.
今回のコードは"200"ですので,どうやら通信が上手く行ったようです. コードの後ろに"OK"とも書いてあります. これはサーバーからのコメントです. 200と書いてあるだけでは分かり難いので,このようにコメントを付加してより細かな状態も返信してくれます. このように問題なくHTTP通信が行われたならば,サーバーからHTML文書をレスポンスと共にもらえるわけです. もし,要求したディレクトリに欲しい文書が無かったり,あるいはリクエストやサーバーに問題があった場合は,それに対応したステータスコードが返答されます. その返信を読んだブラウザは,"ページが表示できません"と表示して我々ユーザに知らせてくれるのです.
レスポンスに関するもっと細かい情報はWikipedia - HTTP Status Codeにあります. またどうでもいい情報ですが,ギークの間では400番代の4,つまり"ページが見つからなかったこと"を意味するステータスコード404が人気です.
このリクエスト,レスポンスといった手紙の内容をもっと詳しく知りたい人はWikipedia - Hypertext Transfer Protocolを参照してみてください。
4714973534149864832 http://www.storange.jp/2012/04/http.html http://www.storange.jp/2012/04/http.html HTTP通信とはなんでしょう? 2012-04-14T12:04:00+09:00 http://www.storange.jp/2012/04/http.html Hideyuki Tabata 200 200 72 72