HTTP Request (リクエスト)
HTTP Request messages (リクエストメッセージ)
ブラウザーで Web ページを開くと、ブラウザーはサーバーに次のようなリクエストメッセージを送信する。
GET / HTTP/1.1
Accept: image/gif, image/jpeg, */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive
リクエストメッセージは次の構文で構成される。
HTTP Request line(リクエストライン)
GET / HTTP/1.1
HTTP Request Header(リクエストヘッダー)
Accept: image/gif, image/jpeg, */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive
HTTP Body(本文)
メッセージ本文(POST メソッドなどを使用)
Start line (リクエスト開始ライン)
HTTP リクエストの開始行には次の 3 つの要素がある。
- HTTP メソッド
- リクエスト対象(パス名)
- HTTP プロトコルバージョン
リクエストラインは次の形式で表示される。
リクエストライン
[HTTP メソッド] [リクエスト対象] [HTTP プロトコルバージョン]
パス名は通常 /aaa/bbb/ccc.html のようなもので、スラッシュで始まるパス名、または http:// で始まる URL が指定される。バージョンは現在 1.1 が一般的に使用される。
HTTP Method (メソッド)
HTTP/1.0、HTTP/1.1 でサポートされるメソッドは次のとおりである。
| メソッド | HTTP/1.0 | HTTP/1.1 | 説明 |
|---|---|---|---|
| GET | ◎ | ◎ | 最も一般的に使われるメソッドである。ブラウザーはサーバーにページの取得を要求する。 |
| HEAD | ◎ | ◎ | ヘッダー専用情報を要求する。サーバーは GET メソッドと HEAD メソッドを必ずサポートしなければならない。 |
| POST | ○ | ○ | method="POST" を指定したフォームに入力したデータをサーバーへ送信するときに使われる。 |
| PUT | ○ | ○ | ファイルをサーバーへアップロードするときに使われる。 |
| DELETE | ○ | ○ | 指定されたリソースの削除をサーバーに要求する。 |
| CONNECT | × | ○ | プロキシサーバー経由で SSL 通信するときなどに使う。 |
| OPTIONS | × | ○ | サーバーがサポートしているメソッドやオプションを照会するときに利用する。 |
| TRACE | × | ○ | HTTP リクエストがどのプロキシサーバーを経由して送信されるかなど、HTTP の動作を追跡するときに利用する。 |
| LINK | ○ | × | 指定した URL とリソースにリンク関係を接続する。HTTP/1.1 ではもう使われない。 |
| UNLINK | ○ | × | 指定された URL とリソース間のリンク関係を解除する。HTTP/1.1 ではもう使われない。 |
(◎: 必須、○: サポート、×: 未サポート)
Apache は上記以外にも PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCK などのメソッドをサポートしている。
GET
GET リクエスト方式は URI(URL)が持つ情報を取得するためにサーバー側へ要求する形式である。
POST
POST リクエスト方式は、リクエスト URI(URL)にフォーム入力を処理するために構成したサーバー側スクリプト(ASP、PHP、JSP など)または CGI プログラムへ Form Action とともに送信される。このときリクエスト情報はヘッダー情報に含まれず、データ部分に入る。
HEAD
HEAD リクエスト方式は GET と似ているが、Web サーバーはヘッダー情報以外のデータを送信しない。Web サーバーの稼働確認(Health Check)や Web サーバー情報(バージョンなど)を得るために使われる。
OPTIONS
rfc2616
このメソッドでシステムがサポートしているメソッドの種類を確認できる。
PUT
POST と似た転送構造を持つため、ヘッダー以外にメッセージ(データ)も送信される。リモートサーバーに指定したコンテンツを保存するために使われ、ホームページ改ざんに悪用されることも多い。
PATCH
PUT と似て、要求されたリソースを修正(UPDATE)するときに使う。PUT はリソース全体を更新する意味だが、PATCH は該当リソースの一部を置き換える意味で使われる。
DELETE
リモート Web サーバーのファイルを削除するために使われ、PUT とは反対の概念のメソッドである。
TRACE
リモートサーバーに Loopback(ループバック)メッセージを呼び出すために使われる。
CONNECT
Web サーバーにプロキシ機能を要求するときに使われる。
リクエスト対象(パス名)
リクエスト対象は URL、パス、クエリ文字列などを含む。
| リクエスト対象形式 | 形式例 | 説明 |
|---|---|---|
| origin form | - POST / HTTP/1.1 - GET /background.png HTTP/1.0 - HEAD /test.html?query=alibaba HTTP/1.1 - OPTIONS /anypage.html HTTP/1.0 |
一般的な形式 |
| absolute form | GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1 | プロキシで GET するときに使用 |
| authority form | CONNECT developer.mozilla.org:80 HTTP/1.1 | CONNECT で使用 |
| asterisk form | OPTIONS * HTTP/1.1 | OPTIONS で使用 |
HTTP プロトコルバージョン
HTTP バージョンを示す。一般的には HTTP/1.1 または 2.0 である。
HTTP Header (リクエストヘッダー)
リクエストヘッダーには 3 つの種類がある。
| ヘッダータイプ | 説明 | 例 |
|---|---|---|
| リクエストヘッダー | リクエスト本文のデータとは関係しないヘッダー | - Host - User-Agent - Accept - - If- - Referer |
| 一般ヘッダー | 取得するリソース | - Date - Cache-Control |
| エンティティヘッダー | リクエスト本文に適用 | - Content-Type - Content-Length - Expires |
HTTP Body (リクエスト本文)
HTTP リクエスト本文はリクエストで送るデータである。
一般的に GET、HEAD、DELETE、OPTIONS にはリクエスト本文がない。リソースを照会または削除する場合にだけ使う。
リクエスト本文は POST、PUT などでリソースにデータを送信する場合に利用する。