概要
HTTP(Hypertext Transfer Protocol)は、Webページにアクセスするためのプロトコルとして広く利用されています。
HTTP通信の構成
HTTPでは、HTTPメッセージによってクライアントとサーバ間のデータの受渡しを行います。クライアントからサーバへ送るメッセージをリクエスト、サーバからクライアントに返されるメッセージをレスポンスと呼びます。

メッセージは、メッセージヘッダとメッセージボディから構成されます。メッセージヘッダの先頭には、リクエストの場合はメソッド、レスポンスの場合はステータスが格納されます。
| リクエスト | HTTPメソッド | サーバに対する要求と取得するパス |
| リクエストヘッダ | リクエストの構成情報、クライアント情報など | |
| リクエストボディ | 送信されるデータ | |
| レスポンス | HTTPステータス | サーバでの処理結果とメッセージ |
| レスポンスヘッダ | コンテンツの構成情報、クライアント情報など | |
| レスポンスボディ | コンテンツ本体 |
HTTPとHTTPS
HTTPとHTTPS(HTTP Secure)の違いは、通信が暗号化されていないか暗号化されているかの違いです。HTTPSは、Web通信の盗聴を防ぐための仕組みで、現在ではほとんどのWeb通信に利用されます。HTTPとHTTPSの違いは以下になります。
| 項目 | HTTP | HTTPS |
| 暗号化 | なし | あり |
| URL | http:// | https:// |
| ポート番号 | 80 | 443 |
HTTPSの暗号化プロトコルとして、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)が利用されています。
メソッド
HTTPメソットは、クライアントからサーバに対して発行する直接の命令で、①メソッド名、②パス、③プロトコル情報で構成されます。
| GET /index.html HTTP/1.1 ① ② ③ |
主なメソッドの種類は以下になります。
| GET | Webページの取得 |
| POST | Webページの取得 |
| HEAD | リソースのヘッダ情報を取得 |
| PUT | Webページの内容を作成・置換 |
| DELETE | Webページの内容を削除 |
| CONNECT | プロキシにトンネリング通信を要求 |
| TRACE | クライアントからのリクエストをそまま通す |
特にGETメソッドとPOSTメソッドの違いは以下になります。
| 項目 | GETメソッド | POSTメソッド |
| データの格納場所 | URLの後ろに付加 | メッセージボディにセットしサーバの標準入力を使用 |
| データの種類 | テキストのみ | テキスト、バイナリ |
| データのサイズ | URLエンコードした状態で255文字まで | 制限なし |
| 秘匿性 | URLからデータの読取りや改ざんが可能 | URLからデータは読取れない |
| アクセスログ | 記録される | 記録されない |
ステータスコード
HTTPステータスは、サーバでの処理結果を表し、プロトコル情報①、ステータスコード②、ステータスメッセージ③で構成されます。
| HTTP/1.1 200 OK ① ② ③ |
主なステータスの種類は以下になります。
成功 |
200 OK | 正常終了 |
| 201 Created | 正常終了(リソースを生成) | |
| 202 Accepted | 受付完了(未処理) | |
リダイレクト |
301 Moved Permanently | リソースの恒久的な移動 |
| 302 Found | リソースの一時的な移動 | |
| 303 See Other | リソースが別の場所に存在 | |
| 304 Not Modified | リソースが変更されていない | |
クライアント エラー |
400 Bad Request | 不正なリクエスト |
| 401 Unauthorized | HTTP認証を要求 | |
| 403 Forbidden | アクセスを拒否 | |
| 404 Not Found | リソースが見つからない | |
| 405 Method Not Found | HTTPメソッドが不許可 | |
| 407 Proxy Authentication Required | プロキシ認証が必要 | |
| 408 Request Tione-out | リクエストタイムアウト | |
サーバエラー |
500 Internal Server Error | サーバエラー |
| 501 Not Implemented | 応答に必要な機能が未実装 | |
| 503 Service Unavailable | HTTPサーバが利用不可 |
ヘッダ情報
メッセージヘッダには、リクエストとレスポンスの内容に応じた情報が入ります。
| Authorization | 認証方式や認証情報(リクエスト) |
| Referer | リンク元のURL情報(リクエスト) |
| User-Agent | ブラウザの名称やバージョン情報(リクエスト) |
| Cookie | クライアントがWebサーバに提示するクッキー(リクエスト) |
| Set-Cookie | Webサーバがクライアントにセットするクッキー(レスポンス) |
| Content-Type | 送信するファイルや文字セットの種類(リクエスト/レスポンス) |
| Server | Webサーバのプログラム名やバージョン情報(レスポンス) |
| Location | リダイレクトさせる先のURI情報(レスポンス) |
リファラー
リファラー(Referrer、メッセージヘッダでは”Referer”と表記)は、リンク元のURLがセットされます。そのため、Web管理者はReferrerを調べることで、自分のサイトがどのリンクから参照されているか分析することができます。
Referrerにはパラメタを含めたURLがセットされるため、URLにセッション管理情報などをセットしている場合には、それらの情報が漏えいする可能性があります。
クッキー
クッキー(Cookie)とは、Webサーバが、アクセスしてきたクライアントに対しブラウザを通じで一時的にデータを書き込むことで、相手を識別したり、セッションの状態を管理する仕組みです。
クッキーは、WebサーバがHTTPヘッダにセットすることで発行され、それ以降、そのサーバへのアクセス時には毎回自動的にHTTPヘッダに付加されます。クッキーには、以下のような制限があります。
- 1つのクッキーには最大4,096バイトのデータを記録可能
- 1つのWebブラウザには最大300個のクッキーが保存可能
- 1台のWebサーバは同じクライアントに対し最大20個のクッキーが発行可能



