Http2とHttp1.Xの違い

 

 

1. http 1とhttp 2の違い

(1)HTTP2はバイナリ転送を使用し、HTTP1.Xはテキスト(文字列)転送を使用します。

バイナリ送信の単位はフレームとストリームです。フレームはストリームを形成し、ストリームにはストリームIDマークもあります

(2)HTTP2は多重化をサポートします

ストリームIDがあるため、同じhttpリクエストを介して複数のhttpリクエスト送信を実装することが可能になり、ストリームIDを使用して、どのストリームがどのhttpリクエストであるかを特定することができます。

(3)。HTTP2ヘッダー圧縮

HTTP2は、gzipを使用してヘッダーを圧縮してから送信します。同時に、クライアントとサーバーはヘッダー情報テーブルを保持します。すべてのフィールドはこのテーブルに記録されるため、以降の各送信では、テーブル内のインデックスIDを送信するだけで済みます。インデックスIDクエリテーブルのヘッダー値

(4)HTTP2はサーバープッシュをサポートします

HTTP2は、クライアントの許可なしにクライアントにコンテンツを積極的にプッシュすることをサポートします

 

第二に、HTTPの歴史

HTTPが確立された当初は、主にWebサーバーからクライアントのブラウザにハイパーテキストマークアップ言語(HTML)ドキュメントを送信するためのものでした。また、フロントエンドでは、作成するHTMLページがWebサーバーに配置され、ユーザー側がブラウザーを介してURLアドレスにアクセスして、Webページの表示されたコンテンツを取得しますが、WEB2.0以降、ページは複雑になっています、それは単なるテキストや画像だけではありません。同時に、HTMLページにはCSSとJavascriptがあり、ページの表示を充実させています。Ajaxの登場により、サーバーからデータを取得する別の方法があります。これらは実際にはHTTPプロトコルに基づいています。また、モバイルインターネット時代には、モバイルブラウザーでページを実行できますが、PCと比較してモバイルネットワークの状態はより複雑であるため、HTTPを理解し、最適化を継続する必要があります。

 

3、HTTPの基本的な最適化

HTTPネットワークリクエストに影響を与える主な要素は、帯域幅と遅延の 2つです。

  • 帯域幅:まだダイヤルアップインターネットアクセスの段階にある場合、帯域幅は要求に影響を与える深刻な問題になる可能性がありますが、ネットワークインフラストラクチャの帯域幅が大幅に改善されたため、帯域幅がネットワーク速度に影響を与えることを心配する必要がなくなりました。その後、遅延のみがあります。

  • ディレイ:

    • ブラウザーのブロック(HOLブロック):ブラウザーは、何らかの理由で要求をブロックします。ブラウザーが同時に接続できるのは、同じドメイン名に対して4つの接続のみです(これはブラウザーのカーネルによって異なる場合があります)。ブラウザーの最大接続数を超えると、以降の要求はブロックされます。

    • DNSルックアップ:接続を確立するには、ブラウザがターゲットサーバーのIPを知っている必要があります。ドメイン名をIPに解決するシステムはDNSです。これは通常、DNSキャッシュの結果を使用して、この時間を短縮する目的を達成できます。

    • 接続の確立(初期接続):HTTPはTCPプロトコルに基づいており、ブラウザーは3回目のハンドシェイク中にHTTP要求パケットをピギーバックするだけで実際の接続を確立できますが、これらの接続を再利用できないと、各要求が発生します。どちらも3方向ハンドシェイクとスロースタートを経験しました。スリーウェイハンドシェイクは、待ち時間が長いシナリオで大きな影響を与えますが、スロースタートは大きなファイルのリクエストに大きな影響を与えます。

 

 

4番目に、HTTP1.0とHTTP1.1の違い

 

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

  1. キャッシュ処理、HTTP1.0では、ヘッダーのIf-Modified-SinceおよびExpiresは主にキャッシュの判断基準として使用され、HTTP1.1ではEntityタグ、If-Unmodified-Since、 If-Match、If-None-Matchなどのオプションのキャッシュヘッダーを使用して、キャッシュ戦略を制御できます。

  2. 帯域幅の最適化とネットワーク接続の使用。HTTP1.0では、帯域幅を浪費するいくつかの現象があります。たとえば、クライアントは特定のオブジェクトの一部のみを必要としますが、サーバーはオブジェクト全体を送信し、再開可能な送信の機能をサポートしません。 HTTP1.1では、リクエストヘッダーに範囲ヘッダーフィールドが導入されています。これにより、リソースの特定の部分のみをリクエストできます。つまり、戻りコードは206(部分的なコンテンツ)であり、開発者が自由に帯域幅と接続を利用できるようになります。

  3. エラー通知管理のために、24個のエラーステータス応答コードがHTTP 1.1に追加されました。たとえば、409(競合)は、要求されたリソースがリソースの現在の状態と競合することを示し、410(存在しない)は、サーバー上の特定のリソースが永続的であることを示します性的な削除。

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

  5. 持続的接続、HTTP 1.1は、PersistentConnectionと要求のパイプライン処理をサポートします。複数のHTTP要求と応答をTCP接続で送信できるため、接続の確立と終了の消費と遅延を削減できます。HTTP1.1ではデフォルトでは、接続:キープアライブが有効になっています。これにより、要求ごとに接続を作成する必要があるというHTTP1.0の欠点がある程度補われます。

     

5、HTTPSとHTTPの違い

 

  • HTTPSプロトコルでは、証明書を申請するためにCAが必要です。通常、無料の証明書はほとんどなく、料金がかかります。

  • HTTPプロトコルはTCPで実行され、送信されるすべてのコンテンツはプレーンテキストであり、HTTPSはSSL / TLSで実行され、SSL / TLSはTCPで実行され、送信されるすべてのコンテンツは暗号化されます。

  • HTTPとHTTPSは完全に異なる接続方法を使用し、異なるポートを使用します。前者は80、後者は443です。

  • HTTPSは、オペレーターのハイジャックを効果的に防止し、ハイジャック対策の大きな問題を解決します。

 

6. SPDY:HTTP1.xの最適化

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

  1. 待ち時間を短縮するために、SPDYはHTTPの高い待ち時間に対応して、多重化(多重化)をエレガントに採用しています。多重化は、tcp接続を複数の要求ストリームと共有することでHOLブロッキングの問題を解決し、待ち時間を減らし、帯域幅の使用率を向上させます。

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

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

  4. HTTPSベースの暗号化プロトコル転送により、データ転送の信頼性が大幅に向上します。

  5. サーバープッシュ(サーバープッシュ)はSPDY Webページを使用します。たとえば、私のWebページにはsytle.cssのリクエストがあります。クライアントがsytle.cssデータを受信すると、サーバーはsytle.jsファイルをクライアントにプッシュします。一方、クライアントがsytle.jsを再度取得しようとすると、それ以上リクエストを送信せずに、キャッシュから直接取得できます。SPDY構成図:

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

 

7、HTTP2.0のパフォーマンスは素晴らしい

HTTP / 2:インターネットの未来  https://link.zhihu.com/?target=https://http2.akamai.com/demoは、HTTP / 2のフェーズを説明するためにアカマイによって作成された公式デモです以前のHTTP / 1.1と比較して、パフォーマンスが大幅に向上しています。同時に379枚の画像が要求され、読み込み時間の比較から、HTTP / 2の速度の利点がわかります。

 

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

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


HTTP2.0とSPDYの違い:

  1. HTTP2.0はプレーンテキストのHTTP伝送をサポートしますが、SPDYはHTTPSの使用を強制します

  2. HTTP2.0メッセージヘッダーの圧縮アルゴリズムは   、SPDY  http://zh.wikipedia.org/wiki/DEFLATEで使用されるDEFLATEではなく、HPACK http://http2.github.io/http2-spec/compression.htmlを使用し  ます。

 

9、HTTP2.0とHTTP1.Xの新機能を比較

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

  • 多重化(MultiPlexing)、つまり接続共有。つまり、各リクエストは接続共有メカニズムとして使用されます。リクエストはIDに対応するため、接続には複数のリクエストがあり、各接続のリクエストはランダムに混合され、受信者はリクエストIDに従ってリクエストを異なるサーバーリクエストに割り当てることができます。

  • ヘッダー圧縮、前述のとおり、前述のHTTP1.xのヘッダーには多くの情報が含まれており、毎回繰り返し送信する必要があります。HTTP2.0はエンコーダーを使用して送信する必要があるヘッダーのサイズを縮小し、通信相手はそれぞれコピーをキャッシュしますヘッダーフィールドテーブルは、繰り返されるヘッダーの送信を回避するだけでなく、送信する必要があるサイズも削減します。

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

     

10. HTTP2.0のアップグレードと変換

  • 以前の記事では、HTTP2.0は実際には非HTTPSをサポートできますが、現在はChromeなどの主流のブラウザーであるFirefoxは、TLSに基づいてデプロイされたHTTP2.0プロトコルのみをサポートしているため、HTTP2.0にアップグレードする場合は、最初にHTTPSをアップグレードする必要があります。 。

  • あなたのウェブサイトをHTTPSにアップグレードされた後、HTTP2.0にアップグレードする方がはるかに簡単です、あなたがnginxのを使用している場合は、単に設定ファイルに対応するプロトコルを開始あなたはを参照することができます。。HTTP2.0設定するためのnginxのホワイトペーパー、nginxの公式ガイド ます。https: //www.nginx.com/blog/nginx-1-9-5/。

  • HTTP2.0を使用する場合、元のHTTP1.xをどうするか?この問題については心配しないでください。HTTP2.0はHTTP1.xのセマンティクスと完全に互換性があります。HTTP2.0をサポートしないブラウザの場合、NGINXは自動的に下位互換性があります。

 

11.注意事項

HTTP1.XでのHTTP2.0多重化と長時間接続多重化の違いは何ですか?

  • HTTP / 1. * 1つの要求/応答、接続を確立し、使い果たされたときにそれを閉じます。各要求は接続を確立する必要があります。

  • HTTP / 1.1 Pipelingの解決策は、シリアル化とシングルスレッド処理のために多数のリクエストがキューに入れられることです。後続のリクエストは、前のリクエストが返されるのを待って実行機会を得ます。リクエストがタイムアウトすると、後続のリクエストはブロックされるだけで、方法はありません。スレッド閉塞の終了とも呼ばれます。

  • 接続で同時に複数のHTTP / 2要求を並行して実行できます。特定のリクエストタスクは時間がかかり、他の接続の通常の実行には影響しません。
    具体的な数値は次のとおりです。

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

  • 通常のクライアント要求プロセス:

サーバープッシュプロセス

ヘッダー圧縮が必要なのはなぜですか?
ページに読み込むリソースが100個あるとします(この数値は今日のWebでもかなり控えめです)。各リクエストには1kbのメッセージヘッダーがあります(Cookieや参照などが存在するため、これも珍しくありません)。 )、これらのメッセージヘッダーを取得するには、少なくとも100kbを消費する必要があります。HTTP2.0はディクショナリを維持し、HTTPヘッダーを差分で更新できるため、ヘッダー送信によって生成されるトラフィックが大幅に削減されます。特定の参照:HTTP / 2ヘッダー圧縮技術の概要

 

HTTP2.0多重化はどの程度優れていますか?
HTTPパフォーマンスの最適化の鍵は、高帯域幅ではなく、低遅延です。TCP接続は時間の経過とともに自動的に「調整」され、最初に接続の最大速度が制限されます。データが正常に送信されると、時間の経過とともに送信速度が向上します。この調整は、TCPスロースタートと呼ばれます。このため、元々バースト的で短期的なHTTP接続は非常に非効率になります。
HTTP / 2を使用すると、すべてのデータストリームで同じ接続を共有できるため、TCP接続をより効率的に使用でき、高帯域幅でHTTPのパフォーマンスを向上させることができます。

目次

 

1. http 1とhttp 2の違い

第二に、HTTPの歴史

3、HTTPの基本的な最適化

4番目に、HTTP1.0とHTTP1.1の違い

5、HTTPSとHTTPの違い

6. SPDY:HTTP1.xの最適化

7、HTTP2.0のパフォーマンスは素晴らしい

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

10. HTTP2.0のアップグレードと変換

11.注意事項


おすすめ

転載: blog.csdn.net/weixin_46729085/article/details/108637750