web-dev-qa-db-ja.com

HTTP 2はサーバープッシュをサポートしますが、これはどういう意味ですか?

HTTP 2 (まだ開発中です)についてたくさん読んだので、サーバーのプッシュ機能についても聞いたのですが、頭の中で、これは明確ではありません。

このサーバープッシュ機能は、クライアントが要求を行わなくてもサーバーがクライアントに応答を送信できることを意味しますか?バニラのようにTCP接続?または私は要点を逃していますか?

24
Epoc

HTTP2プッシュメカニズムは、WebSocketやサーバー送信イベントのような一般的なサーバープッシュメカニズムではありません。

これは、HTTP会話の特定の最適化のために設計されています。具体的には、クライアントがリソース(index.htmlなど)を要求すると、サーバーは次に関連するリソース(theme.css、jquery.js、logo.pngなど)の束を要求することを推測できます。通常、Webページにはそのような関連するリクエストを数十個含めることができます。

HTTP/1.1では、サーバーはクライアントがこれらの関連リソースの要求を実際に送信するまで待機する必要があり、その後、クライアントは接続によって制限され、一度に約6つしか要求しません。したがって、Webページに必要なすべての関連リソースが実際に送信されるまでに、多くのラウンドトリップが必要になる可能性があります。

HTTP/2を使用すると、サーバーはindex.html GET Pushへの応答を送信して、クライアントが持っているかのようにtheme.css、jquery.js、logo.pngなども送信することをクライアントに通知できます。それらを要求した。その後、クライアントはこれらのプッシュをキャンセルするか、複数のラウンドトリップの余分な遅延を発生させることなく、プッシュが送信されるのを待つことができます。

これは、Jettyを使用したPush with SPDY(HTTP2の基礎)のデモです https://www.youtube.com/watch?v=4Ai_rrhM8gA 。桟橋でのHTTP2とSPDYのプッシュAPIに関するブログは次のとおりです。 https://webtide.com/http2-Push-with-experimental-servlet-api/

39
gregw

本質的にあなたの理解は正しいです、しかし、それにはもっとたくさんあります。

サーバーは、HTTPページのリクエストが行われ、そのページが適切にレンダリングするために必要なリソース(画像、JavaScriptファイル、CSSなど)が特定された後にのみ、クライアントにリソースを送信できます。これを担当するメカニズムは、サーバー側のフレームワークです。 Javaでは、これは サーブレット4 およびおそらくJSFになります。

サーバーは、必要に応じてリソースをクライアントに送信することはできません。上記の状況でのみ発生し、クライアントは常にリソースをプッシュするサーバー要求を拒否できます。

HTTP/2サーバープッシュのメカニズムは本当にうまく設計されており、それを理解するために私はこれをお勧めします HTTP/2の概要 そしてこれは の内部に飛び込む詳細な記事ですHTTP/2プロトコル

1
Alex Theedom