http request/responseとは
目標
http request と response メッセージの仕組み、意味について理解する。
HTTPとは
HTTPは、Hypertext Transfer Protocolの略で、HTMLやXMLで書かれたハイパーテキストやその他のデータの転送プロトコル(データ転送の決まり事)です。
HTTP は、リクエスト/レスポンスタイプのデータ通信プロトコルです。Webブラウザなどのクライアントはサーバーにリクエストを送信し、サーバーはレスポンスを送信します。

HTTP リクエスト
以下はサーバーに送信されるHTTPリクエストの例です (内容については後ほど解説します)。
GET / HTTP/1.1 Accept: image/image01.png, */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;) Host: www.example.com Connection: Keep-Alive
GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) Referer: http://localhost:8080/ Accept-Encoding: gzip, deflate Accept-Language: ja,en-US
HTTPレスポンス
以下は、サーバーから送信されるHTTPレスポンスの例です。
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html...
HTTPリクエストの構成
HTTPリクエストは、先頭のReques line、HTTPヘッダー、HTTPボディで構成されます。

Request lineについて
Request lineは、HTTPリクエストの先頭行です。
GET /index.html HTTP/1.1
Request lineは、リクエストメソッド(request method)、リクエストURI(request URI)、HTTPバージョン(HTTP version)で構成されています。

Request Methods
リクエストメソッドには以下のようなものがあります。
- GET
- HEAD
- POST
- PUT
- DELETE
- CONNECT
- OPTIONS
- TRACE
- PATCH
各メソッドの詳細については、HTTP リクエストメソッド を参照してください
HTTPレスポンスの構成
HTTPレスポンスはStatus line、HTTPヘッダー、HTTPボディで構成されます。

Status lineについて
Status lineは、HTTPレスポンスの先頭行です。
HTTP/1.1 200 OK
Status lineは、HTTPバージョン(HTTP version)、ステータスコード(Status Code)、Reason Phraseで構成されます。

ステータスコード
ステータスコードは5つのクラスを持っています。
- 情報レスポンス (100–199)
- 成功レスポンス (200–299)
- リダイレクト (300–399)
- クライアントエラー (400–499)
- サーバエラー (500–599)
ステータスコードの詳細は、 HTTP レスポンスステータスコード を参照してください。
HTTPヘッダーとは
HTTPヘッダーは、リクエスト、レスポンスどちらにも”フィールド: 値”という形式で、複数のフィールドとその値を含んでいます。
GET / HTTP/1.1 Accept: image/image01.png, */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;) Host: www.example.com Connection: Keep-Alive
HTTPヘッダーには4つのタイプ(General header (一般ヘッダー), Request header (リクエストヘッダー), Response header (レスポンスヘッダー), Entity header(エンティティヘッダー) )があります。
General header (一般ヘッダー)
General header (一般ヘッダー)の例
- Connection: Keep-Alive or Close
- 現在のトランザクションが完了したあとも、ネットワーク接続を開いたままにするかどうかを制御します
- Date: <day-name>,<day>,<month>, <year>, <hour>:<minute>:<second> GMT
- メッセージが発信された日時が含まれています
- Cache-Control: public, no-cache, no-store, proxy-revalidate and so on
- リクエストとレスポンスの両方について、キャッシュのためのディレクティブ (指示)
Request header (リクエストヘッダー)
Request header (リクエストヘッダー)の例
- Accept-***:
- クライアントが受け入れることができるアイテム
- Accept-Charset: utf-8, iso-8859-1 など文字コード
- Accept-Language: en-US, ja などの言語
- Accept-Encoding: gzip, deflate, br などのエンコード
- If-***
- 条件付きリクエスト
- If-Match: ETag
- If-Modified-Since: <曜日>,<日>,<月>, <年>, <時間>:<分>:<秒> GMT
- User-Agent: <エージェント名>/<バージョン> <システムとプラットフォーム>
- リクエストしているユーザーエージェント(Mozilla、Safariなど)のバージョン、アプリケーション、オペレーティングシステム、ベンダーなどを指定
- Referer: <URL>
- 現在要求されているページへのリンクがたどられた前のWebページのアドレス
Response header (レスポンスヘッダー)
Response header (レスポンスヘッダー)の例
- Age: <時間>
- オブジェクトがプロキシキャッシュにある時間(秒)
- Location: <URL>
- ページをリダイレクトするURL
Entity header(エンティティヘッダー)
Entity header(エンティティヘッダー)の例
- Content-Length: <サイズ>
- 受信者に送信されるエンティティ本体のサイズ(バイト)
- Allow: GET, POST and HEADなど<HTTPメソッド>
- リソースでサポートされている一連のメソッド
HTTP リクエスト及びレスポンスのボディとは
HTTPリクエストのボディはパラメータを含んでいます。もしRequest lineのリクエストメソッドがパラメータを必要としない場合には、ボディは空白です。 これは、HTTPリクエストのボディの例です。(name と ageがパラメータです)
name=taro&age=18
HTTPレスポンスのボディはHTMLで書かれたハイパーテキストなど、リクエストされたコンテンツそのものです。以下は、HTTPレスポンスのボディの例です。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>The HTML5 Herald</title>...