HTTP1.0、HTTP1.1、HTTP2.0、HTTPSの詳細な説明

1.HTTP1.0とHTTP1.1の違い

HTTP1.0は1996年にWebページで最初に使用されました。当時は、比較的単純なWebページとネットワーク要求でのみ使用されていましたが、HTTP1.1は1999年の現在の主要なブラウザネットワーク要求でのみ広く使用されていました。当時、HTTP1.1は現在最も広く使用されているHTTPプロトコルです。主な違いは主に次のように反映されます。

1.短い接続と長い接続

HTTP / 1.0では、デフォルトで短い接続が使用されます。つまり、要求ごとに接続を再確立する必要があります。HTTPはTCP / IPプロトコルに基づいており、接続が確立または切断されるたびに、3つのハンドシェイクと4つのウェーブのオーバーヘッドが必要になります。これが各要求に必要な場合、オーバーヘッドは比較的大きくなります。したがって、複数の要求を送信するために使用できる長い接続を維持するのが最善です。

HTTP 1.1以降、デフォルトで長い接続が使用され、Connection:keep-aliveはデフォルトで有効になっています。HTTP / 1.1連続接続には、パイプライン化されていないメソッドとパイプライン化されたメソッドがあります。パイプライン方式では、クライアントはHTTP応答メッセージを受信する前に新しい要求メッセージを送信できます。対応するパイプライン化されていない方法は、クライアントが前の応答を受信した後に次の要求を送信できることです。

2.エラーステータス応答コード

HTTP1.1に24個のエラーステータス応答コードを追加しました。たとえば、409(Conflict)は、要求されたリソースがリソースの現在の状態と競合することを示します。410(Gone)は、サーバー上のリソースが完全に削除されることを示します。

3.キャッシュ処理

HTTP1.0では、ヘッダーのIf-Modified-SinceとExpiresが主にキャッシュ判断の基準として使用され、HTTP1.1では、Entityタグ、If-Unmodified-Since、If-Match、If-などのキャッシュ制御戦略が導入されています。なし-キャッシュ戦略を制御するための、一致するオプションのキャッシュヘッダー。

4.帯域幅の最適化とネットワーク接続の使用

HTTP1.0では、帯域幅を浪費する現象がいくつかあります。たとえば、クライアントはオブジェクトの一部のみを必要としますが、サーバーはオブジェクト全体を送信し、ブレークポイント再開可能送信機能をサポートしません。HTTP1.1はで導入されました。リクエストヘッダー範囲ヘッダーに加えて、リソースの特定の部分のみをリクエストできます。つまり、リターンコードは206(Partial Content)であり、開発者が帯域幅を最大限に活用して自由に選択できるようにします。接続。

5.ホストヘッダー処理

HTTP1.0では、各サーバーは一意のIPアドレスにバインドされていると考えられているため、要求メッセージのURLはホスト名を伝達しません。ただし、仮想ホストテクノロジの開発により、物理サーバー上に複数の仮想ホスト(マルチホームWebサーバー)が存在する可能性があり、それらはIPアドレスを共有します。HTTP1.1要求メッセージと応答メッセージの両方がホストヘッダーフィールドをサポートする必要があり、要求メッセージにホストヘッダーフィールドがない場合、エラー(400 Bad Request)が報告されます。
 
 

2.HTTP和HTTPS

1.ポート

HTTP URLは「http://」から始まり、デフォルトでポート80を使用しますが、HTTPS URLは「https://」から始まり、デフォルトでポート443を使用します。

2.セキュリティとリソースの消費

HTTPプロトコルはTCP上で実行され、送信されるコンテンツはすべてプレーンテキストであり、クライアントもサーバーも相手のIDを確認できません。HTTPSはSSL / TLS上で実行されるHTTPプロトコルであり、SSL / TLSはTCP上で実行されます。送信されるすべてのコンテンツは暗号化されます。暗号化は対称暗号化を使用しますが、対称暗号化のキーはサーバーの証明書を使用して非対称暗号化されます。したがって、HTTPはHTTPSほど安全ではありませんが、HTTPSはHTTPよりも多くのサーバーリソースを消費します。

  • 対称暗号化:キーは1つだけで、暗号化と復号化は同じパスワードであり、暗号化と復号化の速度は高速です。一般的な対称暗号化アルゴリズムはDES、AESなどです。
  • 非対称暗号化:鍵はペアで表示され(秘密鍵は公開鍵から派生できず、公開鍵は秘密鍵から派生できません)、暗号化と復号化は異なる鍵を使用します(公開鍵暗号化には秘密鍵の復号化が必要です、秘密キー暗号化には公開キー復号化が必要です)、対称暗号化は比較的低速です。一般的な非対称暗号化アルゴリズムには、RSAとDSAが含まれます。

補足:SSL / TLSプロトコルとは何ですか?

SSL「SecureSocketLayer」プロトコルとTLS「SecureTransportLayer」プロトコルはすべて暗号化プロトコルであり、ネットワークデータ送信中のプライバシーとデータの整合性を保護します。ネットワークによって送信される情報が許可されていない要素によって傍受または変更されないようにし、正当な送信者と受信者だけが情報に完全にアクセスして送信できるようにします。

 
 

3. SPDY:HTTP1.xの最適化

2012年、Googleは次のようにHTTP1.Xのリクエスト遅延を最適化し、HTTP1.Xのセキュリティを解決するSPDYソリューションを提案しました。

1.レイテンシーを削減します

HTTPの高いレイテンシーに対応して、SPDYはエレガントに多重化を採用しています。多重化は、tcp接続を複数の要求ストリームと共有することでHOLブロッキングの問題を解決し、遅延を減らし、帯域幅の使用率を向上させます。

2.リクエストの優先順位(リクエストの優先順位付け)

多重化は、接続の共有に基づいて、重要な要求がブロックされる可能性があるという新しい問題をもたらします。SPDYでは、重要なリクエストが最初に応答されるように、リクエストごとに優先度を設定できます。たとえば、ブラウザがホームページをロードするときは、ホームページのHTMLコンテンツを最初に表示してから、さまざまな静的リソースファイル、スクリプトファイルなどをロードして、ユーザーがWebページのコンテンツを初めて表示できるようにする必要があります。

3.ヘッダー圧縮

前述のように、HTTP1.xヘッダーは冗長であることがよくあります。適切な圧縮アルゴリズムを選択すると、パケットのサイズと数を減らすことができます。

4.HTTPSベースの暗号化プロトコル送信

データ転送の信頼性を大幅に向上させます。

5.サーバープッシュ

たとえば、SPDYを使用しているウェブページにはsytle.cssのリクエストがあります。クライアントがsytle.cssデータを受信すると、サーバーはsytle.jsファイルをクライアントにプッシュします。クライアントが再びsytleを取得しようとすると。 jsはキャッシュから直接取得でき、これ以上のリクエストは必要ありません。

SPDY構成図:

ここに画像の説明を挿入

SPDYはHTTPの下、TCPおよびSSLの上に配置されているため、古いバージョンのHTTPプロトコルと簡単に互換性があり(HTTP1.xのコンテンツは新しいフレーム形式にカプセル化されます)、既存のSSL機能を使用できます。 。
 
 

4. HTTP2.0:SPDYのアップグレードバージョン

HTTP2.0はSPDYのアップグレードバージョンであると言えますが(実際、元々はSPDYに基づいて設計されていました)、HTTP2.0とSPDYには次のような違いがあります。

  1. HTTP2.0はプレーンテキストのHTTP送信をサポートしますが、SPDYはHTTPSの使用を強制します
  2. HTTP2.0メッセージヘッダーの圧縮アルゴリズムは、SPDYで使用されるDEFLATEの代わりにHPACKを使用します
     
     

5.HTTP2.0およびHTTP1.Xと比較した新機能

1.新しいバイナリ形式(バイナリ形式)

HTTP1.xの解析は、テキストに基づいています。テキストプロトコルに基づくフォーマット分析には自然な欠陥があり、テキストの表現は多様化しています。ロバスト性を考慮するシナリオはたくさんあります。バイナリシステムは異なり、0と1の組み合わせのみが認識されます。この考慮事項に基づいて、HTTP2.0のプロトコル分析では、便利で堅牢なバイナリ形式を採用することを決定しました。

2.多重化(MultiPlexing

つまり、接続の共有、つまり各要求は接続の共有メカニズムとして使用されます。リクエストはIDに対応しているため、接続上に複数のリクエストが存在する可能性があり、各接続のリクエストをランダムに混在させることができ、受信者はリクエストのIDに従って異なるサーバーリクエストにリクエストを割り当てることができます。

3.ヘッダー圧縮

HTTP1.xのヘッダーには大量の情報が含まれているため、毎回繰り返し送信する必要があります。HTTP2.0はエンコーダーを使用して、送信する必要のあるヘッダーのサイズを縮小します。通信の両当事者は、それぞれヘッダーのテーブルをキャッシュします。フィールド。ヘッダーの繰り返し送信を回避するだけでなく、転送のサイズを削減します。

4.サーバープッシュ

SPDYと同様に、HTTP2.0にもサーバープッシュ機能があります。

 
 

6.HTTP1.XでのHTTP2.0多重化と長距離接続多重化の違いは何ですか

  • HTTP / 1. * 1つの要求/応答、接続を確立し、使い果たされたときにそれを閉じます。各要求は接続を確立する必要があります。
  • HTTP / 1.1 Pipelingソリューションは次のとおりです。シリアル化されたシングルスレッド処理のために多数のリクエストがキューに入れられ、後続のリクエストは前のリクエストが返されるのを待って実行の機会を得ます。リクエストがタイムアウトすると、後続のリクエストは次のようになります。ブロックされており、方法はありません。これは、人々がしばしばブロックされたスレッドの終わりと呼ぶものです。
  • 複数のHTTP / 2リクエストは、接続上で同時に並行して実行できます。特定の要求タスクは時間がかかり、他の接続の通常の実行には影響しません。

ここに画像の説明を挿入

ここに画像の説明を挿入
 
 

7.サーバープッシュとは

サーバープッシュは、クライアントが必要とするリソースをindex.htmlとともにクライアントに送信できるため、クライアントがリクエストを繰り返す必要がなくなります。リクエストの開始や接続の確立などの操作がないため、静的リソースをサーバーにプッシュして速度を大幅に向上させることができます。

通常のクライアントリクエストプロセス

ここに画像の説明を挿入
 
サーバープッシュプロセス
ここに画像の説明を挿入
 
 

参照:https
//mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?

おすすめ

転載: blog.csdn.net/weixin_43901865/article/details/112766275