HTTP チュートリアル
HTTP(HyperText Transfer Protocol)は、分散型、協調型、ハイパーメディア情報システムのためのアプリケーション層プロトコルです。
HTTP は、ワールドワイドウェブ(WWW)のデータ通信の基盤であり、クライアントとサーバー間の通信を保証することを目的として設計され、インターネット上で最も一般的に使用されるプロトコルの1つです。
HTTP は、データ(HTML ファイル、画像ファイル、クエリ結果など)を転送するための TCP/IP 通信プロトコルに基づいています。
HTTP の当初の設計目的は、HTMLページを公開および受信する方法を提供することであり、HTTP または HTTPS プロトコルを介して要求されるリソースは、URI(Uniform Resource Identifiers)によって識別されます。
HTTP のリクエスト-レスポンス
HTTP の基本的な動作原理は、クライアント(通常はWebブラウザ)がサーバーにリクエストを送信し、サーバーがリクエストを受信した後、対応するリソースを返すことです。これらのリソースには、Webページ、画像、音声ファイル、ビデオなどがあります。
HTTP はクライアント-サーバーモデルを使用しており、クライアントがリクエストを送信し、サーバーがレスポンスを返します。

HTTP のリクエスト-レスポンスモデルは、通常、次の手順で構成されます。
接続を確立する:クライアントとサーバー間の接続を確立します。従来の HTTP では、これは TCP/IP プロトコルに基づいています。最近の HTTP/2 と HTTP/3 では、より高度なトランスポート層プロトコル、例えば TCP ベースのバイナリプロトコル(HTTP/2)や UDP ベースの QUIC プロトコル(HTTP/3)を使用しています。
リクエストを送信する:クライアントはサーバーにリクエストを送信します。リクエストには、アクセスするリソースの URL、リクエストメソッド(GET、POST、PUT、DELETE など)、リクエストヘッダー(Accept、User-Agent など)、およびオプションのリクエストボディ(POST または PUT リクエストの場合)が含まれます。
リクエストを処理する:サーバーはリクエストを受信した後、リクエスト内の情報に基づいて対応するリソースを検索し、対応する処理操作を実行します。これには、データベースからデータを取得する、動的コンテンツを生成する、静的ファイルをそのまま返すなどが含まれます。
レスポンスを送信する:サーバーは処理結果をレスポンスにカプセル化し、クライアントに送り返します。レスポンスには、ステータスコード(リクエストの成功または失敗を示す)、レスポンスヘッダー(Content-Type、Content-Length など)、およびオプションのレスポンスボディ(HTML ページ、画像データなど)が含まれます。
接続を閉じる:リクエスト-レスポンスサイクルが完了した後、クライアントとサーバー間の接続は閉じることができます。ただし、永続接続(HTTP/1.1 の keep-alive など)を使用している場合は除きます。
HTTP メソッド
HTTP メソッドは、クライアントがサーバー上のリソースに対して実行できるアクションを指定します。
主な HTTP メソッドは次のとおりです。
- GET:指定されたリソースをサーバーから取得するリクエストです。これは最も一般的なメソッドで、ページへのアクセスに使用されます。
- POST:サーバーにリクエストボディ内のデータの受け入れと処理を要求します。通常、フォームの送信に使用されます。
- PUT:サーバーにリソースを保存し、リクエストボディの内容でターゲットリソースのすべての内容を置き換えることを要求します。
- DELETE:指定されたリソースの削除をサーバーに要求します。
- HEAD:GET と似ていますが、リソースのコンテンツは取得せず、レスポンスヘッダー情報のみを取得します。
HTTP ステータスコード
HTTP ステータスコードは、クライアントのリクエストに対するサーバーの応答です。
ステータスコードは5つのクラスに分類されます。
- 1xx(情報ステータスコード):受信したリクエストが処理中であることを示します。
- 2xx(成功ステータスコード):リクエストが正常に処理されたことを示します。
- 3xx(リダイレクトステータスコード):このリクエストを完了するには追加の操作が必要です。
- 4xx(クライアントエラーステータスコード):リクエストに構文エラーが含まれているか、完了できないことを示します。
- 5xx(サーバーエラーステータスコード):サーバーがリクエストの処理中にエラーが発生しました。
HTTP バージョン
HTTP には複数のバージョンがあり、現在広く使用されているのは HTTP/1.1 と HTTP/2、そして徐々に普及している HTTP/3 です。
- HTTP/1.1:永続接続をサポートし、複数のリクエスト/レスポンスが同じ TCP 接続を介して転送できるようにし、接続の確立と切断のコストを削減します。
- HTTP/2:バイナリフレーミングに基づき、マルチプレクシングをサポートします。単一の HTTP/2 接続を介して、複数の独立した双方向の通信を同時に開始できます。
- HTTP/3:QUIC プロトコルに基づいており、ネットワーク遅延を減らし、転送速度とセキュリティを向上させることを目的としています。
セキュリティ
HTTP 自体は安全ではありません。転送されるデータが暗号化されていないため、傍受や改ざんがされる可能性があります。この問題を解決するために、HTTPS(次の章で詳しく説明)が導入されました。HTTPS は HTTP に SSL/TLS プロトコルを追加し、データ転送に暗号化と認証を提供します。
その他の拡張