なぜHTTP 2を使うのですか?

3048 ワード

最近うちの会社の公式サイトはもとのhttp 1.1はhttp 2にアップグレードされましたが、私たちのフロントエンドの開発はhttp 2に対してまだ愚かで、なぜこれに変えたのか分からないので、http 2に関する知識を補充しました.
http1.1 http 1と比較する.0はどのようなメリットがありますか?
  • のキャッシュ処理はHTTP 1にある.0では主にヘッダのIf-Modified-Since,Expiresをキャッシュ判定の基準として用い,HTTP 1.1は、より多くのキャッシュ制御ポリシー、例えば、Entity tag、If-Unmodified-Since、If-Martch、If-None-Martchなどのより多くの選択可能なキャッシュヘッダを導入して、キャッシュポリシーを制御する.
  • 帯域幅の最適化及びネットワーク接続の使用HTTP 1.0では、クライアントがオブジェクトの一部を必要とするだけで、サーバがオブジェクト全体を送信し、ブレークポイント再送機能をサポートしないなど、帯域幅を浪費する現象がある.1は、要求ヘッダにrangeヘッダドメインを導入し、リソースの一部のみを要求することを可能にする.すなわち、リターンコードは206(Partial Content)であり、これにより、帯域幅と接続を十分に利用するために開発者の自由な選択が容易になる.
  • エラー通知の管理はHTTP 1にある.1には、要求されたリソースがリソースの現在の状態と競合することを示す409(Conflict)のような24個のエラー状態応答コードが追加され、410(Gone)は、サーバ上のリソースが永続的に削除されたことを示す.
  • Hostヘッダ処理はHTTP 1にある.0ではサーバごとに一意のIPアドレスがバインドされていると考えられるため、要求メッセージのURLはホスト名(hostname)を伝達していない.しかし、仮想ホスト技術の発展に伴い、1台の物理サーバ上に複数の仮想ホスト(Multi-homed Web Server)が存在し、それらは1つのIPアドレスを共有することができる.HTTP 1.1の要求メッセージと応答メッセージはいずれもHostヘッダドメインをサポートし、要求メッセージの中にHostヘッダドメインがなければ1つのエラーを報告する(400 Bad Request).
  • 長接続HTTP 1.1長接続(PersistentConnection)と要求されたパイプラインをサポート(Pipelining)処理は、1つのTCP接続上で複数のHTTP要求と応答を転送することができ、接続の確立と閉鎖の消費と遅延を低減し、HTTP 1.1ではデフォルトでConnection:keep-aliveをオンにし、HTTP 1.0の要求ごとに接続を作成する欠点をある程度補った.
    http 2はhttp 1と比較する.1どのようなメリットがありますか?
  • バイナリフレームHTTP/2は、HTTP 1ではなくバイナリ形式でデータを転送する.xのテキストフォーマットは,バイナリプロトコルの解析がより効率的である.HTTP/2では、ドメイン名の下ですべての通信が単一の接続で完了し、この接続は任意の数の双方向データストリームを担持することができる.各データ・ストリームはメッセージとして送信され、メッセージは1つ以上のフレームから構成される.複数のフレーム間を乱順に送信することができ、フレームヘッダのストリーム識別子に基づいて再アセンブリすることができる.
  • 多重多重化は、従来のシーケンスおよびブロック機構の代わりに使用される.すべてが要求されたのは,1つのTCP接続によって同時完了する.HTTP 1.xでは、複数のリクエストを同時に実行するには、複数のTCPリンクを使用する必要があり、ブラウザは、リソースを制御するために、1つのドメイン名に対して6~8個のTCPリンクリクエストに対して
  • を制限する.
  • サーバプッシュサービス側は、ブラウザが対応する場所に解析され、要求が開始されてから応答することなく、ページHTMLを送信するときに他のリソースをアクティブにプッシュすることができる.
  • ヘッダ圧縮HTTP 1.1要求のサイズはますます大きくなり、ACK付き応答が戻ってくるのを待つ必要があるため、TCPウィンドウの初期サイズよりも大きくなることもある.HTTP/2はメッセージヘッダにHPACK(http/2ヘッダ専用の圧縮フォーマット)を用いて圧縮伝送を行い、メッセージヘッダが占有するネットワークのトラフィックを節約することができる.HTTP/1.xは要求するたびに、大量の冗長ヘッダ情報を携帯し、多くの帯域幅リソースを浪費する.
  • HTTP2.0の多重化とHTTP 1.Xにおける長接続多重化の違いは何ですか?
  • HTTP/1.0一回の要求-応答、1つの接続を創立して、使い終わって閉じます;各リクエストは接続を確立します.
  • HTTP/1.1 Pipeling解決方式は、いくつかの要求が並んで単一スレッド処理をシリアル化し、後の要求は前の要求の戻りを待ってこそ実行機会を得ることができ、ある要求がタイムアウトするなど、後の要求はブロックされるしかなく、仕方がない、つまり人々がよく言う線頭ブロックである.
  • HTTP/2複数の要求は、同時に1つの接続上で並列に実行することができる.ある要求タスクは時間がかかり、他の接続の正常な実行に影響しません.

  • nginx上http 2.0構成
    HTTP 2.0は実際にはHTTPS以外のものをサポートすることができるが、現在主流のブラウザはchromeのように、firefoxはTLSベースのHTTP 2のみをサポートしていることを示している.0プロトコルなのでHTTP 2にアップグレードしたい.0はHTTPSをアップグレードしたほうがいいです.httpに基づいてhttp 2として配置するのは非常に簡単で、Nginx上でHTTP/2を開くにはNginx 1.9が必要である.5以上のバージョンで、OpenSSLバージョンが1.0である必要がある.2以上です.Opensslバージョンの表示
    openss version
    OpenSSL 1.0.2k-fips  26 Jan 2017

    サーバ構成セグメントでのNginx構成のlistenを変更してhttp 2を追加すればよい.
    server{
        listen  443 ssl http2;
        ···
    }

    nginx nginx-s reloadを再起動し、ブラウザでhttp 2が有効かどうかを確認できます.
    リファレンスドキュメント
  • HTTP1.0、HTTP1.1とHTTP 2.0の違い
  • NginxでHTTP/2簡明チュートリアル
  • を構成