HTTPの基礎 : HTTP

Pocket

HTTP(Hyper Text Transfer Protocol)のメモ。

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プロトコルスウィート。

HTTPリクエスト

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サーバに渡す。

  • 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フォームのデータがメッセージボディーとして送信される。

HTTP1.1 リクエスト・ラインのメソッド

メソッドはWebブラウザがWebサーバに要求するアクションを指定する。HTTP1.1ではGET,POST,HEAD,PUT,OPTIONS,DELETE,TRACE,CONNECTがある。良く使われるのはGETとPOST。

GET

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を指定したときなどがある。

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’]で取得する。

HTTPレスポンス

WebサーバからWebブラウザへ送信されるHTTPメッセージをHTTPレスポンスと呼ぶ。
HTTPレスポンスは3つの部分から構成される。

  • ステータス・ライン
  • レスポンス・ヘッダー
  • レスポンス・ボディー(HTMLデータ)

ステータス・ラインはそれぞれ空白で区切られたHTTPバージョン、リクエストの結果を表すレスポンスのステータスコード、ステータスコードを説明する英語文字列で構成されます。

レスポンスヘッダ

レスポンスのデータ(HTMLなど)を説明するContent-TypeやContent-Lengthなどが記述される。

メッセージ・ボディ(HTMLデータ)

ステータス・ライン 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>

参考URL

» List of HTTP header fields

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。