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 	ファイルがない