HTTP2 を始める

1. 背景

前回の記事では、gRPC が優れている理由の 1 つである ProtoBuf シリアル化プロトコルを紹介しました。2 つ目の理由は、HTTP2 の採用です。HTTP2 は SPDY から開発されました。過去には、タオバオ MTOP プラットフォームにはパフォーマンスの最適化のために SPDY プロトコルが埋め込まれていました。このようにして、タオバオ クライアントはバックエンド インターフェイスを XX 倍速く調整できるようになりました。今すぐ HTTP2.0 に置き換えるべきです。何年も経ち、MTOP が何なのかほとんど忘れてしまったので、メモを書いて整理する必要があります頻繁に。

2. HTTP1 の HTTP2 最適化

1. 多重化

  • HTTP2 は単一の TCP 接続で並列リクエストを実装します。1 つの接続で任意の数の双方向データ ストリームを伝送できます。ストリームは接続内の仮想チャネルであり、ストリーム内のメッセージはバイナリ フレームで送信されます。
  • HTTP1.X では複数の同時リクエストが必要で、複数の TCP 接続を使用する必要があり、単一のドメイン名に対するリクエストの数には制限があります。

2. データのエンコード

  • HTTP2 はリクエストとレスポンスを小さなフレームに分割し、バイナリ エンコードを使用します。
  • HTTP1.X の要求および応答メッセージは、開始行、ヘッダー、本文で構成され、各部分は改行文字で区切られます。

3. HTTP2 は、ヘッダー圧縮とサーバー プッシュ機能もサポートします。

3. 実験的テスト

この実験の目的は、HTTP2 の多重化特性をテストすることです。

1.環境の構築

Nginx 設定 Http2 必要条件
Nginx バージョンは 1.9.5 以降、私のバージョンは 1.20.1
OpenSSL バージョンは 1.0.2e 以降、私のバージョンは OpenSSL 1.0.2k
Nginx に 2 つのモジュールがインストールされているかどうかを確認します --with-http_v2_module, - -opensslあり

nginx.confの設定

注: HTTP2 の構成には、HTTPS の構成と同じ証明書が必要です。これをサポートするには、HTTPS 構成に [http2] を追加します。HTTPS を削除するには、[https] を削除するだけです。

2. ネットワークリクエストメッセージの比較

まず、20 枚の画像を埋め込んだ Index.html を作成しました。

<img src="a.jpg"/>
<img src="b.jpg"/>
......
<img src="t.jpg"/>

HTTP2 として構成された、ブラウザーのネットワーク要求のスクリーンショット

HTTP2 として構成された TCPDUMP はサーバー上のデータをキャプチャします。接続が 1 つだけ (SYN パケットの数) であることがわかります。

tcpdump -ieth0 tcp port 443 and host 115.195.149.98 -w http2.pcap

HTTPS ブラウザとして構成されたネットワーク リクエストのスクリーンショット

TCPDUMP はサーバー側でパケット データをキャプチャします。21 件の接続、1 件のindex.html、および 20 件の画像リクエストが作成されたことがわかります。

結論: パケット キャプチャ データの分析から、HTTP2 は 1 つの TCP 接続のみを使用していることがわかります。理論的には、それほど多くの TCP スリーウェイ ハンドシェイクを行わなくても高速になります。実際のテスト結果も高速ですが、サンプルの数がこの 1 つのテストでは数が少なすぎて評価基準として使用できません。原理だけを理解してください。HTTPS プロトコルについては、パケット キャプチャ ツールを使用して HTTPS メッセージを解析することがわかります。

記事を書き終えてから、HTTP3 が昨年登場したことを知りましたが、HTTP2 についてはまだあまり調べていませんでした。

おすすめ

転載: blog.csdn.net/2301_76787421/article/details/132841277