HTTPプロトコル再考
=== HTTPによるデータの受け渡し形式 ===
HTTPでは,基本的に,以下のような形式でデータの引渡しを行います.
ヘッダ部 区切り(空の行) データ部
データは,
・データの内容に関する情報や制御情報を記述したヘッダ部
・データ本体があるデータ部
に分かれ,この2つは何もない空の行によって区切られています.
=== ブラウザからサーバへの要求 ===
ブラウザからサーバに送られるページリクエスト情報の例です.
このリクエストにはデータ部がないため,ヘッダ部と,ヘッダ部の終わりを示す「区切り(空の行)」が送られます.
GET /test.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: www.test.org Connection: Keep-Alive
ヘッダ部
区切り
さらに,ヘッダ部の中は,コマンドと情報に分かれます.
=== ブラウザからサーバへの要求(コマンド) ===
コマンドは,上の例の太字の部分 GET /test.php HTTP/1.1 になります.
コマンドの主なものは,
GET サーバへのページの要求. POST ブラウザからデータを送る.
があります.
コマンドの次には,要求するページの指定が入ります.上の例では, /test.php です.
この部分は,ブラウザで指定した URL のうち,サーバ名を除いた部分が入ります.
例えば,
htttp://www.abc.com/ であれば /
http//www.abc.com/test/index.html であれば /test/index.html
になります.
最後に,この要求が HTTP プロトコルのどのバージョンにより送信されているかを示す情報が入ります.
=== サーバからブラウザへの応答 ===
サーバからは,ブラウザがリクエストしたページが送られてきます.
ヘッダ部に,そのページに関する情報やサーバの情報が送られてきます.また,データ部には,ページ本体が入ります.
ヘッダ部
HTTP/1.1 200 OK
Date: Thu, 25 Jul 2002 14:49:01 GMT
Server: Apache/1.3.24 (Unix) mod_ssl/2.8.8 OpenSSL/0.9.6d PHP/4.1.2
Last-Modified: Fri, 14 Dec 2001 05:09:32 GMT
ETag: "45aa-707-3c19898c"
Accept-Ranges: bytes
Content-Length: 1799
Connection: close
Content-Type: text/html
区切り
データ部
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
........
サーバからの応答に関しても,ステータスと情報の2つに分かれます.
サーバからブラウザへの応答(ステータス)
ステータスは,上の例の HTTP/1.1 200 OK になります.
この 200 OK の部分がステータスで,主に以下のステータスがあります.
コード 200 OK 正常終了 400 Bad Request 不正な要求 401 Unauthorized 認証失敗 403 Forbidden アクセス禁止 404 Not Found ファイルがない