HTTP チュートリアル


HTTP(ハイパーテキスト転送プロトコル、HyperText Transfer Protocol)は、分散型、協調型、ハイパーメディア情報システムのためのアプリケーション層プロトコルです。

HTTP は、ワールドワイドウェブ(WWW)のデータ通信の基盤であり、クライアントとサーバー間の通信を確保することを目的として設計された、インターネット上で最も一般的に使用されるプロトコルの1つです。

HTTP は、TCP/IP 通信プロトコルに基づいてデータ(HTML ファイル、画像ファイル、検索結果など)を転送するためのプロトコルです。

HTTP を設計する当初の目的は、HTML ページを公開および受信する方法を提供することでした。HTTP または HTTPS プロトコルを介して要求されるリソースは、統一資源識別子(Uniform Resource Identifiers、URI)によって識別されます。


HTTP のリクエスト-レスポンス

HTTP の基本的な動作原理は、クライアント(通常は 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(次の章で詳しく説明します)が導入されました。つまり、HTTP に SSL/TLS プロトコルを追加し、データ転送に暗号化と認証を提供します。

その他の拡張