1. 序章

エンジニアリングの観点から、ネットワークは通常、OSIモデルまたはTCP/ IPモデルを考慮して、操作を定義および整理します。 これらのモデルは、ネットワーク層、トランスポート層、アプリケーション層などのさまざまな層を想定しています。

各ネットワーク層には、無数の機能を実装する特定のプロトコルがあります。 例としては、ネットワーク層の IP 、トランスポート層のTCPとUDP、アプリケーション層のHTTPがあります。

これらのプロトコルは進化するため、時間の経過とともに更新および拡張されます。 したがって、ネットワークプロトコルには複数のバージョンがあるのは当然です。

このコンテキストでは、このチュートリアルはHTTPアプリケーションプロトコルを全体的に調査します。 まず、アプリケーションプロトコルについて簡単に説明します。 したがって、HTTPの一般的な目的を学習します。 最後に、HTTPバージョン間の主な違いを確認し、体系的な要約で比較します。

2. アプリケーション層プロトコル

アプリケーション層プロトコルは、異なる計算アプリケーション間のエンドツーエンド通信を提供する抽象的なネットワーク層を指します。 これは、OSIモデルの第7層であり、TCP/IPモデルの第4層です。

実際には、アプリケーション層はユーザーに最も近い層です。したがって、たとえば、電子メール、ストリーム、およびブラウザーのクライアントが動作するのは、アプリケーション層です。

さらに、アプリケーション層システムを構築するために採用されている3つの主要なアーキテクチャがあります。

  • クライアントサーバー:の主な特徴 クライアント/サーバーアーキテクチャ 集中型サーバーからサービスを要求および受信する複数のクライアントを持つことです
  • ピアツーピアピアツーピアアーキテクチャは、ネットワークに接続され、連携して操作を実行する独立したコンピューターのコレクションを考慮します。
  • Hybrid :サーバーとピアの両方を使用して操作を実行するアーキテクチャ

当然、アプリケーション層は下位層の機能を使用します。 たとえば、アプリケーションプロトコルは、他の層がネットワークに接続されている正しい宛先コンピューターとの通信に取り組むことを前提としています。

最後に、一般的なアプリケーション層プロトコルの例としては、HTTP、FTP、TELNET、POP、DNS、およびSMTPがあります。

3. ハイパーテキスト転送プロトコル

HTTPは、分散ハイパーメディアシステムを作成するために使用されるアプリケーションプロトコル(レイヤー7OSIおよびレイヤー4TCP / IP)です。 アプリケーション層で動作するため、アドレス指定や送信など、いくつかのネットワーキングの側面に依存しません。

歴史的に、HTTPは、インターネットを介したクライアントとサーバー間の通信を可能にする単純なプロトコルとして登場しました。 そのリリースから、HTTPはワールドワイドウェブ上で情報を交換するための最も関連性のあるプロトコルの1つになりました。

このように、HTTPは90年代からインターネットで使用されてきました。 HTTP(0.9)の最初のリリースはかなり制限されていました。 このバージョンでは、クライアントはGETという単一の操作を使用してサーバーに情報を要求することしかできませんでした。

最初のHTTPリリースは、ASCIIデータの送信のみをサポートしていました。 ただし、次のリリースでは、このサポートは他のデータ型に拡張されました。

HTTPはTCP/IPに依存して機能します。 これは、HTTPが接続ベースのプロトコルであることを意味します。 このようにして、HTTPセッションは、クライアントに接続されたサーバー間の一連のメッセージ交換として理解できます。

次のサブセクションでは、以前にリリースされたバージョンと比較した特定の特性と新規性に焦点を当てて、1.0から3.0までのリリースされたHTTPの各バージョンについて説明します。

3.1. HTTPバージョン1.0

前に示したように、HTTPの最初のバージョンでは、サーバーからの情報の取得のみが許可されていました。 しかし、インターネットが進化し、新しい機能が生まれるにつれて、それは不十分になりました。

これに関連して、HTTPのバージョン1.0は、バージョン0.9から約5年後の1996年にリリースされました。

HTTPのバージョン1.0には、いくつかの新しいユーティリティがあります。 それらのいくつかを見てみましょう:

  • ヘッダ:メソッドとリソース名のみがHTTP0.9リクエストを構成しました。 次に、HTTP 1.0はHTTPヘッダーを導入し、プロトコルを柔軟かつ拡張可能にするメタデータの送信を可能にしました。
  • Versioning :HTTPリクエストは、採用されたバージョンを明示的に通知し、リクエスト行に追加します
  • ステータスコード:HTTP応答にステータスコードが含まれるようになり、受信者はリクエストの処理ステータス(成功または失敗)を確認できるようになりました
  • Content-type :HTTPヘッダーのおかげで、特にContent-Typeフィールドに固有の、HTTPはプレーンHTMLファイル以外のドキュメントタイプを送信できます。
  • 新しいメソッド:GETの他に、HTTP 1.0は2つの新しいメソッド(POSTとHEAD)を提供します

要約すると、HTTP1.0は0.9バージョンよりもはるかに堅牢になりました。 プロトコルの改善に最も責任があるのは、HTTPヘッダーと新しいHTTPメソッドです。

そのため、HTTPヘッダーにより、クライアントはさまざまなファイルタイプを送受信し、関連するメタデータを交換できました。 次に、新しいメソッドにより、クライアントはドキュメントに関するメタデータのみを回復すること(HEAD)と、クライアントからサーバーにデータを転送すること(POST)の両方が可能になりました。

3.2. HTTPバージョン1.1

HTTPのバージョン1.1は、前のバージョン1.0からわずか1年後の1997年にリリースされました。 HTTP1.1はHTTP1.0の拡張であり、いくつかの拡張機能を提供します。

最も関連性の高い機能強化の中で、次のことを引用できます。

  • ホストヘッダー:HTTP 1.0は、公式にはホストヘッダーを必要としません。 HTTP 1.1は、仕様によりそれを要求します。 ホストヘッダーは、プロキシサーバーを介してメッセージをルーティングするために特に重要であり、同じIPを指すドメインを区別できます。
  • 永続的な接続:HTTP 1.0では、各要求/応答ペアは新しい接続を開く必要があります。 HTTP 1.1では、単一の接続を使用して複数のリクエストを実行できます
  • ステータスを続行:サーバーが処理できないリクエストを拒否しないようにするために、クライアントは最初にリクエストヘッダーのみを送信し、継続ステータスコード(100)を受信するかどうかを確認できるようになりました。 
  • 新しいメソッド:HTTP 1.0のすでに利用可能なメソッドに加えて、1.1バージョンでは、PUT、PATCH、DELETE、CONNECT、TRACE、およびOPTIONSの6つのメソッドが追加されました。

強調表示された拡張機能に加えて、圧縮と解凍、多言語サポート、バイト範囲転送など、HTTPのバージョン1.1で導入された他の多くの機能があります。

具体的には、新しいメソッドはHTTPの使用における実際の改善を表しています。 PUTメソッドは、既存のリソースの置き換えを担当しました。 PATCHメソッドは、既存のリソースの特定のデータを更新します。 一方、DELETEは既存のリソースを削除します。

HTTP CONNECTは、プロキシサーバーを介してトンネルを作成できます。 TRACEは、クライアントから宛先サーバーへのパスでループバックテストを実行します。 最後に、OPTIONSは、サーバーとの利用可能な通信オプションに関する情報を返します。

3.3. HTTPバージョン2.0

HTTPバージョン2.0は、HTTP1.1から約18年後の2015年に正式にリリースされました。 特に、HTTP2.0はプロトコルパフォーマンスの向上に重点を置いていました。

そのために、HTTP 2.0は、接続とデータ交換を改善するためのいくつかの機能を実装しました。 それらのいくつかを見てみましょう:

  • 多重化を要求する :HTTP1.1はシーケンシャルプロトコルです。 したがって、一度に1つのリクエストを送信できます。 次に、HTTP 2.0を使用すると、要求を送信したり、応答を非同期で受信したりできます。 この上 、単一の接続を使用して同時に複数のリクエストを実行できます
  • リクエストの優先順位付け:HTTP 2.0では、リクエストのバッチに数値の優先順位付けを設定できます。 したがって、JSファイルの前にWebページCSSを取得するなど、応答を期待する順序を明示することができます。
  • 自動圧縮:以前のバージョンのHTTP(1.1)では、要求と応答の圧縮を明示的に要求する必要があります。 ただし、HTTP 2.0は、GZip圧縮を自動的に実行します
  • 接続リセット:何らかの理由でサーバーとクライアント間の接続を閉じ、すぐに新しい接続を開くことができる機能
  • サーバープッシュ:サーバーが大量のリクエストを受信しないようにするために、HTTP2.0ではサーバープッシュ機能が導入されました。 これにより、サーバーはすぐに要求されるリソースを予測しようとします。 そのため、サーバーはこれらのリソースをクライアントキャッシュにプロアクティブにプッシュします

さらに、HTTP 2.0はバイナリプロトコルになり、以前のHTTPプレーンテキストバージョンに取って代わりました。 要約すると、HTTP 2.0は、最新のHTTPバージョンの問題と制限を解決するための拡張機能のパッチと見なすことができます。

3.4. HTTPバージョン3.0

HTTP 3.0はインターネットドラフトであり、インターネット技術特別調査委員会(IETF)のRequest For Comments(RFC)ドキュメントであった以前のHTTPバージョンとは異なります。 その最初のドラフトは2020年に公開されました。

HTTP2.0とHTTP3.0の主な違いは、採用されているトランスポート層プロトコルです。 HTTP 2.0では、 TLS (HTTPSおよびHTTP)の有無にかかわらずTCP接続があります。 HTTP 3.0は、QUIC(Quick UDP Internet Connections)を介して設計されています。

QUICは、要するに、ネイティブの多重化と組み込みの暗号化を備えたトランスポート層プロトコルです。 QUICは、接続が失われ、接続が遅い場合の遅延の問題を軽減できることに加えて、迅速なハンドシェイクプロセスを提供します。

QUICから継承される潜在的な利点に加えて、HTTP 3.0のもう1つの関連する特性は、常に暗号化された接続を作成することです。 したがって、現在のHTTP2.0で常にHTTPSを採用しているのと似ています。

4. 体系的な要約

現在、HTTPは本当に関連性のあるプロトコルであり、インターネット上で実行される複数のシステムをサポートしています。 1991年に最初にリリースされたこのプロトコルには、いくつかのバージョンを経て、いくつかの更新がありました。

最初のリリース(バージョン0.9)からHTTP 2.0のリリースまで、新しいメソッドと機能を追加するためのプロトコルの拡張に加えて、HTTPの機能に複数の機能拡張がありました。

このような拡張機能と新規性の例は、プロトコルヘッダー(1.0)、ステータスコード(1.0)、永続接続(1.1)、要求多重化(2.0)、およびサーバープッシュ(2.0)でした。

前述の新機能に加えて、標準のGETに加えて、POST(1.0)、HEAD(1.0)、PUT(1.1)、PATCH(1.1)、DELETE(1.1)、CONNECT(1.1)の新しいメソッドも導入されました。 )、TRACE(1.1)、およびOPTIONS(1.1)。

ただし、HTTP 3.0では、ここでの主な目新しさは特定の新機能ではありません。 実際、HTTP 3.0は、HTTPが最初のバージョンであるTCPから採用していたトランスポート層プロトコルを新しいものであるQUICに置き換えます。

TCPをQUICに置き換えることで、HTTP開発者は、他の改善の中でも、ネイティブおよび標準の暗号化(HTTPとHTTPSはなくなり、すべてのHTTP通信が暗号化されます)と接続の高速確立を実現することを期待しています。

次に、最初のリリース(バージョン0.9)から最後の提案(バージョン3.0)までのHTTPの進化をまとめた画像です。

5. 結論

このチュートリアルでは、HTTPについて学びました。 特に、さまざまなバージョンでのHTTPプロトコルの進化の調査に焦点を当てました。 最初に、アプリケーション層プロトコルの幅広い定義を研究しました。 そこで、HTTPを調査し、利用可能な各バージョンでの機能を理解しました。 最後に、提示されたすべての概念を体系的な要約で確認しました。

最初のバージョンでWebブラウジングを可能にする単純なプレーンテキストプロトコルから、HTTPは今日いくつかの異なるシステムをサポートする強力なバイナリプロトコルになりました。したがって、HTTPは現在のワールドワイドウェブで重要な役割を果たしていると結論付けることができます。 。