HTTP(Hyper Text Transfer Protocol)のメモ。
HTTPはWebブラウザとWebサーバ間の通信で利用されるプロトコル[1]でTCP/IP[2]のアプリケーション層に位置する。クライアントはWebブラウザが多い。以降はWebブラウザと書く。
HTTPはWebブラウザからWebサーバへ要求するHTTPリクエストとWebサーバからWebブラウザへ応答するHTTPレスポンスで構成される。
[1] プロトコルは“規約”や“決め事”という意味。
[2] 正確にはTCP/IPプロトコルスウィート。
Webブラウザからサーバへ送信されるメッセージをHTTPリクエストと呼ぶ。HTTPリクエストは3つの部分で構成される。
HTTPリクエストの必須部分。メソッド、リソースのURI、HTTPのバージョン情報で構成される。
(例) GET /index.html HTTP1.1
GET | → | メソッド |
/index.html | → | リソースのURI |
HTTP1.1 | → | HTTPバージョン |
メソッドはWebブラウザがWebサーバに要求するアクションを指定する。メソッドの詳細は後述の「 HTTP1.1 リクエスト・ラインのメソッド」に記載する。
Webブラウザは下記のような付加情報をリクエスト・ヘッダーとしてWebサーバに渡す。
具体例 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 Accept: image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
リクエスト・ラインのメソッドでPOSTを指定するとHTMLフォームのデータがメッセージボディーとして送信される。
メソッドはWebブラウザがWebサーバに要求するアクションを指定する。HTTP1.1ではGET,POST,HEAD,PUT,OPTIONS,DELETE,TRACE,CONNECTがある。良く使われるのはGETとPOST。
URIで指定したリソースをWebブラウザに送るように指示。GETは静的リソース(.html,htm,gif,jpg等)を取得する。またパラメータが少ないかもしくは全くない場合には動的なリソースも取得できる。GETの?以降のパラメータはキー=値の組で&で区切り複数個指定できる。パラメーターをURLクエリ文字列とも呼ぶ。
GET /cgi-bin/sample.cgi/?key1=value1&key2=value2 HTTP1.1
決められた文字以外をURLに含めるときは%XX(16進数)という形で符号化する。符号化をパーセントエンコーディングと呼ぶ。
デフォルトではWebブラウザからサーバへのHTTPリクエストはGETで行われる。その他のメソッドを利用するようにブラウザの動きを変更できる。具体例としてHTMLのformのaction属性にpostを指定したときなどがある。
WebブラウザからWebサーバへデータを送信(HTMLフォームから)するときに使われる。
データはメッセージ・ボディとして送信される。通常はメッセージボディーのメタ情報としてContent-TypeやContent-Lengthなどの行をリクエスト・ヘッダーに追加して送信する。
リクエスト・ライン | → | POST /cgi-bin/htmlform.cgi HTTP1.1 |
リクエスト・ヘッダー | → | User-Agent:MOZILLA1/0 Content-Type:application/x-www-form-urlencoded Content-Length: 31 |
空行 | → | |
メッセージボディ | → | name=myname password=mypasssword |
Webプログラミングの代表的な処理はHTTPリクエストのGETメソッドのクエリ文字列やPOSTメソッドのメッセージボディの文字列をスクリプトで取得して操作すること。
PHPの場合GETクエリ文字はスクリプト中で$_GET[‘key’]で取得する。またPOSTメソッドのメッセージボディは$_POST[‘key’]で取得する。
WebサーバからWebブラウザへ送信されるHTTPメッセージをHTTPレスポンスと呼ぶ。
HTTPレスポンスは3つの部分から構成される。
ステータス・ラインはそれぞれ空白で区切られたHTTPバージョン、リクエストの結果を表すレスポンスのステータスコード、ステータスコードを説明する英語文字列で構成されます。
レスポンスのデータ(HTMLなど)を説明するContent-TypeやContent-Lengthなどが記述される。
ステータス・ライン | → | HTTP1.1 200 OK |
レスポンス・ヘッダー | → | Data:Tue,01,Dec 2001 23:59:59 GMT Content-Type:text/html Content-Length: 47 |
空行 | → | |
HTMLデータ | → | <html> <body> <h1>Hello,World!</h1> </body> </html> |
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。