HTTPの基礎 : HTTP
(X)HTMLに関連して、HTTPの基本事項。
HTTP(Hyper Text Transfer Protocol)
HTTPとは、ウェブサーバとウェブブラウザ間の通信で利用されるプロトコル※1です。HTTPはTCP/IP※1のアプリケーション層に位置します。
※1:プロトコルとは“規約”や“決め事”といった意味を持ちます。
※2:正確にはTCP/IPプロトコルスウィートです。
HTTPはクライアント※1からウェブサーバへの要求であるHTTPリクエストとウェブサーバからクライアントへ応答であるHTTPレスポンズで構成されます
※1:多くの場合クライアントとはウェブブラウザです。
HTTPリクエスト
クライアントからサーバへ送信されるHTTPメッセージをHTTPリクエストと呼ぶます。HTTPリクエストは次の3つの部分から構成されています。
- リクエスト・ライン
- リクエスト・ヘッダー
- メッセージ・ボディ
リクエスト・ライン
HTTPリクエストの必須部分であり、メソッド,リソースのURI,HTTPバージョン情報で構成されます。
(例) GET /index.html HTTP1.1
| GET | → | メソッド |
| /index.html | → | リソースのURI |
| HTTP1.1 | → | HTTPバージョン |
メソッドはクライアントがサーバに実行を要求するアクションを指定します。
メソッドの詳細は後述の「 HTTP1.1 リクエスト・ラインのメソッド」を参照してください。
URIのルート(/)がサーバマシンのどの実パスに対応するかは、ウェブサーバの設定ファイルで指定します。
リクエスト・ヘッダー
クライアントは以下のような付加情報をリクエスト・ヘッダーとしてウェブサーバに渡します。
- ウェブブラウザ名,バージョン情報
- ウェブブラウザで利用可能な言語や文字コード
(具体例例)
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 リクエスト・ラインのメソッド
メソッドはクライアントがサーバに実行を要求するアクションを指定します。
HTTP1.1ではGET,POST,HEAD,PUT,OPTIONS,DELETE,TRACE,CONNECTがあります。このうち良く使われるのが、GETとPOSTです。本文でもGETとPOSTのみ説明します。
GET
URIで指定したリソースをウェブブラウザに送るように指示する。GETは一般的な静的リソース(.html,htm,gif,jpg等)を取得するが、パラメータが少ないかもしくは全くない場合には動的なリソースを取得することもできる。GETの?以降のパラメータをクエリ文字列と呼びます。
GET /cgi-bin/sample.cgi/?name=myname&password=mypassword HTTP1.1
デフォルトではクライアント(Webブラウザ)からサーバへのHTTPリクエストはGETで行われます。しかしその他のメソッドを利用するようにブラウザの動きを変更することができます。具体的には、HTMLのform要素のaction属性にpostを指定するなどの方法があります。次にPOSTメソッドについて書きます。
POST
ウェブブラウザからウェブサーバへデータを送信(通常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 |
ウェブプログラミングを簡単に説明すると、HTTPリクエストのGETメソッドのクエリ文字列やPOSTメソッドのメッセージボディの文字列をスクリプトで取得して操作することです。
※PHPの場合GETクエリ文字はスクリプト中で$_GET['key']で取得する。またPOSTメソッドのメッセージボディは$_POST['key']で取得する。
HTTPレスポンズ
サーバからクライアントへ送信される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> |
HTTPリクエスト/リスポンズを見るツール
ブラウザのプラグインとしてHTTPリクエスト/レスポンズを表示するソフト(LiveHTTPHeaders)をご紹介します。
http://livehttpheaders.mozdev.org/
コメントはまだありません。
コメントの投稿
改行と段落タグは自動で挿入されます。メールアドレスは表示されません。
利用可能な HTML タグ :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite="">
<cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>