HTTP 101(エイチティーティーピー ワンオーワン)とは | 意味や読み方など丁寧でわかりやすい用語解説
HTTP 101(エイチティーティーピー ワンオーワン)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
エイチティーティーピーひゃくいち (エイチティーティーピーイチマルイチ)
英語表記
HTTP 101 (エイチティーティーピー ハンドレッドワン)
用語解説
HTTP(HyperText Transfer Protocol)は、ウェブ上で情報をやり取りするために不可欠なプロトコルである。インターネットの根幹を成す技術の一つであり、ウェブブラウザがウェブサーバーと通信し、ウェブページやその他のリソースを表示する際の約束事を定義する。具体的には、クライアント(通常はウェブブラウザ)がサーバーに対してリクエストを送り、サーバーがそのリクエストに応じたレスポンスを返すという、一方向のリクエスト・レスポンスモデルに基づいて動作する。この仕組みにより、HTML文書、画像、動画といった様々な形式のウェブコンテンツが世界中でやり取りされている。HTTPは「ステートレス」なプロトコルである点が特徴であり、個々のリクエストとレスポンスは独立しており、サーバーは過去の通信状態を記憶しない。これにより、サーバーは各リクエストを個別に処理できるため、設計が単純化され、スケーラビリティが向上するという利点がある。
詳細に目を向けると、HTTPはTCP/IPプロトコルスタックのアプリケーション層に位置し、通常はポート80番を使用する。より安全な通信を必要とする場面では、SSL/TLSプロトコルによって暗号化されたHTTPSが用いられ、この場合はポート443番が使われる。
クライアントからサーバーへ送信されるHTTPリクエストメッセージは、主に三つの部分から構成される。第一に「リクエストライン」であり、ここにはサーバーにどのような操作を求めるかを示すHTTPメソッド(例:GET, POST)、要求するリソースのパスを示すリクエストURI(例:/index.html)、そして使用するHTTPのバージョン(例:HTTP/1.1)が含まれる。第二に「ヘッダーフィールド」で、リクエストに関する付加的な情報、例えばクライアントの種類を示すUser-Agentや、受け入れ可能なメディアタイプを示すAcceptなどがキーと値のペアで記述される。第三に「メッセージボディ」があり、これはPOSTメソッドなどでサーバーにデータを送信する際に用いられ、フォームの入力内容やアップロードするファイルデータなどが格納される。GETメソッドによるリソース取得のリクエストでは、通常このボディは含まれない。
一方、サーバーからクライアントへ返されるHTTPレスポンスメッセージも、同様に三つの主要な部分から成る。第一に「ステータスライン」であり、これには使用されたHTTPバージョン、サーバーがリクエストを処理した結果を示す3桁の「ステータスコード」(例:200, 404)、そしてそのステータスコードを人間が理解しやすいように説明する「ステータスフレーズ」(例:OK, Not Found)が含まれる。第二に「ヘッダーフィールド」で、レスポンスに関するメタ情報、例えば返されるコンテンツのタイプを示すContent-Typeや、コンテンツの長さを表すContent-Length、セッション管理に用いられるSet-Cookieなどが記述される。第三に「メッセージボディ」があり、ここには要求されたリソースの実際のコンテンツ、つまりHTML文書の内容や画像データなどが格納される。
HTTPメソッドには様々な種類があるが、特に重要なのは以下の通りである。GETメソッドは、指定されたURIからリソースを取得する際に使用される。このメソッドはサーバーの状態を変更しないべきである(べき等性)。POSTメソッドは、指定されたURIへデータを送信し、サーバーがそのデータを受け取って新しいリソースを作成したり、既存のリソースを更新したりする際に用いられる。PUTメソッドは、指定されたURIにリクエストボディのデータでリソースを作成または更新する。DELETEメソッドは、指定されたURIのリソースを削除する。その他にも、リソースのヘッダー情報のみを取得するHEADメソッドや、利用可能な通信オプションを問い合わせるOPTIONSメソッドなどがある。
HTTPステータスコードは、サーバーがリクエストをどのように処理したかを示す重要な情報であり、その最初の桁によって大まかな分類がなされている。1xxは「情報」を示し、リクエストが受信され、処理が継続中であることを意味する。2xxは「成功」を示し、リクエストが正常に受信、理解、受理されたことを意味する。最も一般的な200 OKは、リクエストが成功し、リソースが返されたことを示す。3xxは「リダイレクション」を示し、リクエストを完了するためにさらなるアクションが必要であることを意味する。例えば301 Moved Permanentlyは、リソースが恒久的に別の場所に移動したことを示す。4xxは「クライアントエラー」を示し、リクエストに誤りがあるなど、クライアント側に問題があることを意味する。404 Not Foundは、要求されたリソースが見つからなかったことを示し、403 Forbiddenは、アクセスが拒否されたことを示す。5xxは「サーバーエラー」を示し、サーバーがリクエストの処理に失敗したことを意味する。500 Internal Server Errorは、サーバー内部で予期せぬエラーが発生したことを示す。
HTTPヘッダーフィールドは、通信の細かな制御やメタ情報の伝達に不可欠である。例えば、キャッシュ制御(Cache-Control)、認証情報(Authorization)、言語設定(Accept-Language)など、多岐にわたる情報がヘッダーを通じて交換される。これにより、ウェブ通信の柔軟性と効率性が高められる。
HTTPのステートレス性は、前述の通りサーバーの負担を軽減する一方で、ユーザーのログイン状態やショッピングカートの内容といったセッション情報を維持できないという課題も生じさせる。この課題を解決するためには、CookieやURLパラメータ、隠しフォームフィールドなどの技術を用いて、クライアント側またはサーバー側でセッション状態を管理する必要がある。Cookieは特に広く利用されており、サーバーがクライアントに発行し、クライアントが次回のリクエスト時にその情報をサーバーに送り返すことで、状態を「擬似的に」維持する。
HTTPは、その登場以来、進化を続けてきた。初期のHTTP/1.0では接続ごとに新たなTCP接続を確立していたが、HTTP/1.1では持続的接続(Persistent Connection)が導入され、複数のリクエスト・レスポンスを単一のTCP接続で処理できるようになったことで効率が向上した。さらに、HTTP/2では多重化(Multiplexing)やヘッダー圧縮などにより、単一のTCP接続でさらに多くのリクエストを並行して処理できるようになり、ウェブページの表示速度が大幅に改善された。現在では、TCPではなくUDPをベースとしたQUICプロトコル上で動作するHTTP/3も登場し、接続の確立時間短縮やパケットロス時の影響軽減など、さらなる高速化と信頼性の向上が図られている。
システムエンジニアを目指す上で、HTTPの基本的な概念、リクエストとレスポンスの構造、主要なメソッドやステータスコード、そしてそのステートレス性といった仕組みを理解することは、ウェブアプリケーション開発の基盤を築く上で極めて重要である。これらの知識は、単にウェブページを表示するだけでなく、RESTful APIの設計や、ウェブセキュリティ、パフォーマンス最適化など、多岐にわたる領域で応用されるため、しっかりと習得しておくべきである。