HTTP 2 (まだ開発中)について多くのことを読んだので、サーバー プッシュ機能についても聞いたことがありますが、私の頭では、これは明確ではありません。
このサーバー プッシュ機能は、クライアントが要求を行わなくても、サーバーがクライアントに応答を送信できることを意味しますか? バニラの TCP 接続のように?それとも私は要点を逃していますか?
HTTP 2 (まだ開発中)について多くのことを読んだので、サーバー プッシュ機能についても聞いたことがありますが、私の頭では、これは明確ではありません。
このサーバー プッシュ機能は、クライアントが要求を行わなくても、サーバーがクライアントに応答を送信できることを意味しますか? バニラの TCP 接続のように?それとも私は要点を逃していますか?
HTTP2 プッシュ メカニズムは、Websocket やサーバー送信イベントのような一般的なサーバー プッシュ メカニズムではありません。
これは、HTTP 会話の特定の最適化のために設計されています。具体的には、クライアントがリソース (例: index.html) を要求すると、サーバーは次に一連の関連リソース (例: theme.css、jquery.js、logo.png など) を要求すると推測できます。通常、Web ページには、このような関連付けられた要求が数十個含まれる場合があります。
HTTP/1.1 では、サーバーはクライアントが実際にこれらの関連付けられたリソースの要求を送信するまで待機する必要があり、クライアントは一度に約 6 個しか要求しないように接続によって制限されます。したがって、Web ページが必要とするすべての関連リソースが実際に送信されるまでに、多くの往復が必要になる場合があります。
HTTP/2 を使用すると、サーバーは index.html GET プッシュ promise への応答を送信して、theme.css、jquery.js、logo.png なども送信することをクライアントに伝えることができます。それらを要求しました。その後、クライアントはこれらのプッシュをキャンセルするか、複数のラウンドトリップによる余分な遅延を招くことなく送信されるのを待つことができます。
Jetty https://www.youtube.com/watch?v=4Ai_rrhM8gAを使用した SPDY (HTTP2 の基礎) によるプッシュのデモを次に示します。Jetty での HTTP2 および SPDY のプッシュ API に関するブログは次のとおりです: https://webtide.com/http2-push-with-experimental-servlet-api/
基本的にあなたの理解は正しいですが、それにはさらに多くのことがあります。
サーバーは、HTTP ページの要求が行われ、そのページが適切にレンダリングするために必要なリソース (画像、JavaScript ファイル、CSS など) が特定された後にのみ、クライアントにリソースを送信できます。これを担当するメカニズムは、サーバー側のフレームワークです。Java では、これはServlet 4であり、場合によっては JSF になります。
サーバーは、必要に応じてリソースをクライアントに送信することはできません。上記の状況下でのみ発生し、クライアントはリソースをプッシュするサーバー要求を常に拒否できます。
HTTP/2 サーバー プッシュのメカニズムは非常によく設計されており、それを理解するには、HTTP/2 の概要と、 HTTP/2 プロトコルの内部を詳しく説明している記事をお勧めします。