web-dev-qa-db-ja.com

HTTP2がバイナリプロトコルであると言っているのはなぜですか。

私はhttp1http2との間の違いについての記事を読んでいますが、私が持っている主な質問はそれがそれが言うときですhttp2はバイナリプロトコルですしかしhttp1はテキストプロトコルです

多分間違っているが、データがメモリ内にバイナリ表現フォームを持つことができるあらゆる形式であり、TCP/IPネットワークを介した転送であっても、データがレイヤーに準拠した形式で配置されている場合でもまたはTCP/IPモデル表現)は、ネットワークを介したデータ転送のコンテキストに技術的にtextual形式が存在しないことを意味します。

だから私はhttp2とhttp1の間でこの違いを実際に理解することはできません、あなたは私を助けてください。

10

バイナリはおそらく混乱している用語です - すべてがコンピュータのある時点で最終的にバイナリです!

HTTP/2は、HTTPメッセージがパケット(フレームと呼ばれる)にフォーマットされ、各フレームがストリームに割り当てられているA aにフォーマットされている高度に構造化されたフォーマットがあります。 HTTP/2フレームのフレームは特定のフォーマットを持っています 各フレームの始めに宣言されている長さとフレームヘッダー内のさまざまな他のフィールドを含みます。多くの点で、それはTCPパケットのようなものです。読み取りHTTP/2フレーム(最初の24ビットはフレームタイプ...等を定義する8ビットが続く、このパケットの長さである)定義されたプロセスに従うことができます。フレームの後に、ヘッダは、ペイロード(例えばHTTPヘッダ、または身体ペイロード)を付属しており、これらはまた、事前に知られている特定の形式になります。 HTTP/2メッセージは、1つまたは複数のフレームで送信することができます。

対照的にHTTP/1.1は_内のテキストの行で構成された非構造化形式であるASCIIエンコーディング - そうです、これは最終的にバイナリとして送信され、それは、具体的に別々の部分に分割されるのではなく、基本的には文字のストリームの/フレーム(株以外)。改行文字に達するまで、HTTP/1.1のメッセージ(または少なくとも第1のHTTPリクエスト/レスポンスラインおよびHTTPヘッダー)は、文字一つずつに読み込むことにより解析されます。あなたは文字で、それの文字を処理しなければならないように、各ラインがどのくらい事前に知っていないので、これは一種厄介です。典型的には、コンテンツ長HTTPヘッダーにこれを定義するように事前に知られているように、HTTP/1.1でHTTPボディの長さが若干異なる処理されます。 HTTP/1.1のメッセージは、データの一つの連続ストリームとしてその全体が送られなければならないとの接続は何か、それが完了するまで、そのメッセージを送信するために使用することはできません。

HTTP/2がもたらすという利点は、メッセージを特定のフレームにパッケージ化することによって、メッセージを混乱させることができるということです。ここでは少し要求1があります。ここでは、ここでは少し要求2があります。 1.1 HTTPメッセージがIDがどのリクエストに属しているかに関してタグ付けされたPackets/Framesに折り返されていないため、これは不可能です。

私はダイアグラム こちら とアニメーションバージョン ここ それがこれより良い概念を助けます。

4
Barry Pollard

その理由は、http2の要求データごとのデータがバイトによって分離され、送信される前に新しいバイナリプロトコル層に組み立てることができるという理由があると思います。対照的に、HTTP1.1要求データは完全な全体であり、それは分離できず、開始から終了から譲渡されなければなりません。

0
zizhen zhan