HTTP(HyperText Transfer Protocol)とは、WebブラウザとWebサーバの間でWeb情報をやり取りするためのプロトコルである。
HTTPの概要
HTTPは、Webページの表示や操作、ファイルのダウンロードなど、WebブラウザとWebサーバ間の通信を行うための通信規則である。WebブラウザからWebサーバに対してリクエスト(要求)を送り、Webサーバからリクエストに応じたレスポンス(応答)を受け取ることによって、WebブラウザはWebページを表示したり、ファイルのダウンロードを行ったりすることができる。
HTTPは、リクエストとレスポンスの2つの要素から構成される。
リクエストとは、WebブラウザからWebサーバに対して送信される要求である。リクエストには、リクエストの種類やリクエストの対象、リクエストの条件などに関する情報が含まれる。
レスポンスとは、WebサーバからWebブラウザに対して送信される応答である。レスポンスには、リクエストの処理結果や、リクエストに応じたデータなどに関する情報が含まれる。
HTTPリクエストの構成
HTTPリクエストは、以下の3つの要素で構成される。
- リクエスト行
- ヘッダーフィールド
- ボディ
リクエスト行
リクエスト行は、リクエストの種類、リソースのURL、HTTPバージョンを示す。
リクエストの種類には、以下のようなものがある。
- GET:リソースを取得する
- POST:リソースを送信する
- PUT:リソースを更新する
- DELETE:リソースを削除する
ヘッダーフィールド
ヘッダーフィールドは、リクエストに関する追加情報を示す。
ヘッダーフィールドには、以下のようなものがある。
ボディ
ボディは、リクエストに付随するデータである。
ボディには、以下のようなものがある。
HTTPリクエストの種類
HTTPリクエストは、クライアントからサーバーへ送信されるメッセージであり、主に以下の種類に分類される。
1. GET
リソースの取得をリクエストする。最も一般的なリクエストメソッドであり、ブラウザでWebページを表示する際に使用される。
2. POST
リソースの作成や更新をリクエストする。フォームデータなどのデータをサーバーへ送信する際に使用される。
3. PUT
リソースの更新をリクエストする。指定されたリソースを、送信されたデータで完全に置き換える。
4. PATCH
リソースの部分的な更新をリクエストする。PUT と異なり、リソース全体を置き換えるのではなく、一部のみを更新する。
5. DELETE
リソースの削除をリクエストする。
6. HEAD
リソースのヘッダー情報のみを取得する。リソース本体を取得せずに、ヘッダー情報のみを確認したい場合に使用する。
7. OPTIONS
サーバーがサポートしているリクエストメソッドを問い合わせる。
8. TRACE
リクエストメッセージ処理の過程をサーバーに追跡させる。
9. CONNECT
クライアントとサーバー間でトンネルを確立する。HTTPS などの暗号化通信を使用する際に使用される。
上記以外にも、いくつかの拡張リクエストメソッドが存在する。
HTTPレスポンスの構成
HTTPレスポンスについてもHTTPリクエストと同様、以下の3つの要素で構成される。
- ステータス行
- ヘッダーフィールド
- ボディ
ステータス行
ステータス行は、HTTPリクエストに対する応答を示す。ステータスコードは、HTTPリクエストが成功したか失敗したかを示す3桁の数字からなるコードである。
ステータスコードには、以下のようなものがある。
- 200 OK:リクエストが成功
- 400 Bad Request:リクエストが不正
- 500 Internal Server Error:サーバエラー
ヘッダーフィールド
ヘッダーフィールドは、HTTPリクエストの応答に関する追加情報を示す。ヘッダーフィールドには、以下のようなものがある。
- Content-Type:ボディのコンテンツの種類
- Content-Length:ボディの長さ
- Content-Encoding:ボディのエンコード形式
ボディ
ボディは、HTTPリクエストに対する応答のデータである。ボディには、以下のようなものがある。
- テキストデータ
- 画像データ
- 音声データ
- 動画データ
HTTPレスポンスの種類
HTTPレスポンスは、主に以下の種類に分類される。
1xx: 情報
- 100 Continue: クライアントはリクエストを続行してもよいことを示す。
- 101 Switching Protocols: サーバーがリクエストされたプロトコルに切り替えることを示す。
- 102 Processing: サーバーがリクエストを処理中であることを示す。
- 103 Early Hints: サーバーがリクエストの処理に関するヒントを提供する。
2xx: 成功
- 200 OK: リクエストが成功したことを示す。
- 201 Created: リクエストが作成されたことを示す。
- 202 Accepted: リクエストが受け入れられ、処理が開始されたことを示す。
- 203 Non-Authoritative Information: レスポンスがキャッシュされた情報であることを示す。
- 204 No Content: リクエストは成功したが、コンテンツは送信されないことを示す。
- 205 Reset Content: クライアントはリクエストをリセットすべきことを示す。
- 206 Partial Content: リクエストされたコンテンツの一部のみが送信されることを示す。
3xx: リダイレクト
- 300 Multiple Choices: 複数の選択肢があることを示す。
- 301 Moved Permanently: リソースが永久的に移動したことを示す。
- 302 Found: リソースが一時的に移動したことを示す。
- 303 See Other: 別のURIを参照すべきことを示す。
- 304 Not Modified: リソースが変更されていないことを示す。
- 305 Use Proxy: プロキシを使用すべきことを示す。
- 306 Switch Proxy: 別のプロキシを使用すべきことを示す。
- 307 Temporary Redirect: リソースが一時的に別のURIに移動したことを示す。
4xx: クライアントエラー
- 400 Bad Request: リクエストが不正であることを示す。
- 401 Unauthorized: 認証が必要であることを示す。
- 402 Payment Required: 支払いが必要であることを示す。
- 403 Forbidden: リソースへのアクセスが禁止されていることを示す。
- 404 Not Found: リソースが見つからないことを示す。
- 405 Method Not Allowed: 使用されたメソッドが許可されていないことを示す。
- 406 Not Acceptable: リクエストされたコンテンツが利用できないことを示す。
- 407 Proxy Authentication Required: プロキシ認証が必要であることを示す。
- 408 Request Timeout: リクエストがタイムアウトしたことを示す。
- 409 Conflict: リソースの競合が発生したことを示す。
- 410 Gone: リソースが削除されたことを示す。
- 411 Length Required: リクエストヘッダーにContent-Lengthが必要であることを示す。
- 412 Precondition Failed: リクエストの前提条件が満たされていないことを示す。
- 413 Request Entity Too Large: リクエストエンティティが大きすぎることを示す。
- 414 Request-URI Too Long: Request-URIが長すぎることを示す。
- 415 Unsupported Media Type: サポートされていないメディアタイプであることを示す。
- 416 Requested Range Not Satisfiable: リクエストされた範囲が利用できないことを示す。
- 417 Expectation Failed: 期待された処理が実行できないことを示す。
- 418 I’m a teapot: 418ステータスコードは、HTCPCP-TEAポットの通信プロトコルに関するRFC 2324 で定義されたジョークである。
5xx: サーバーエラー
- 500 Internal Server Error: サーバーでエラーが発生したことを示す。
- 501 Not Implemented: サーバーがリクエストを処理できないことを示す。
- 502 Bad Gateway: サーバーがゲートウェイとして機能できないことを示す。
- 503 Service Unavailable: サービスが利用できないことを示す。
- 504 Gateway Timeout: ゲートウェイがタイムアウトしたことを示す。
- 505 HTTP Version Not Supported: 使用されたHTTPバージョンがサポートされていないことを示す。
- 506 Variant Also Negotiates: サーバーがバリアントネゴシエーションをサポートしていることを示す。
- 507 Insufficient Storage: サーバーに十分なディスク容量がないことを示す。
- 508 Loop Detected: リクエストが無限ループに陥っていることを示す。
- 510 Not Extended: サーバーが拡張機能をサポートしていないことを示す。
- 511 Network Authentication Required: ネットワーク認証が必要であることを示す。
HTTPの暗号化
HTTP通信は、デフォルトでは暗号化されていないため、通信内容を盗聴されたり改ざんされたりするリスクがある。そこで、HTTP通信を暗号化するために、HTTPSと呼ばれるプロトコルが使用される。
HTTPSでは、通信内容が暗号化されているため、盗聴や改ざんのリスクを防止できる。
HTTPSは、以下のような場合に利用される。
- ログイン画面: ユーザーIDやパスワードなどの重要な情報を入力する画面。
- クレジットカード情報入力画面: クレジットカード番号などの機密情報を入力する画面。
- オンラインバンキング: 銀行口座へのログイン、振り込み、口座情報の閲覧など。
- 電子商取引: 商品購入、クレジットカード情報の入力など。
まとめ
HTTPは、WebブラウザとWebサーバの間でWeb情報をやり取りするためのプロトコルである。
HTTP リクエストには様々な種類があり、それぞれ異なる目的で使用される。適切なリクエストメソッドを選択することで、効率的な通信が可能となる。
また、HTTPSは、HTTPの通信内容を暗号化するプロトコルである。いずれのプロトコルも、Webページの利用が拡大していくにつれて、HTTPの重要性はますます高まっていくと考えられる。