ホームページ >ウェブフロントエンド >jsチュートリアル >HTTP/2サーバープッシュについて
HTTP/2 サーバー プッシュについて話す前に、HTTP/2 は HTTP/1.x の多くの欠点を解決するように設計されていることをまず知っておく必要があります。現代の Web ページでは、HTML、スタイルシート、スクリプト、画像など、多くのリソースが使用されています。 HTTP/1.x では、これらのリソースはそれぞれ明示的にリクエストする必要があります。これは時間がかかるプロセスになる可能性があります。したがって、ブラウザは HTML を取得することから始めて、ページを解析して評価するにつれて徐々にリソースを取得します。サーバーはブラウザがすべてのリクエストを行うまで待機する必要があるため、ネットワークはアイドル状態になり、十分に使用されていないことがよくあります。
レイテンシーを改善するために、HTTP/2 ではサーバー プッシュが導入されました。これにより、ブラウザーが明示的にリソースを要求する前に、サーバーがブラウザーにリソースをプッシュできるようになります。サーバーは多くの場合、ページに多くの追加リソースが必要であることを認識しており、ブラウザーの最初のリクエストに応答するときにそれらのリソースのプッシュを開始できます。これにより、サーバーはアイドル状態の可能性があるネットワークを最大限に活用できるようになり、ページの読み込み時間が短縮されます。
serverpush.svg.png
プロトコル層では、HTTP/2 サーバーのプッシュは、push_promise フレームによって駆動されます。つまり、サーバーは、ブラウザーが間もなく発行するリクエストを予測します。ブラウザは PUSH_PROMISE を受け取るとすぐに、サーバーがこのリソースを転送しようとしていることを認識します。その後、ブラウザーはリソースが必要であることを発見した場合、新しいリクエストを送信するのではなく、プッシュが完了するまで待機します。これにより、ブラウザがネットワークの待機に費やす時間が短縮されます。 net/http パッケージでのサーバー プッシュ
go1.8 では、http.Server からのプッシュ応答のサポートが導入されています。この機能は、実行中のサーバーが HTTP/2 サービスで、受信接続が HTTP/2 を使用する場合に使用できます。どの HTTP ハンドラーでも、http.ResponseWriter が新しい http.Pusher インターフェイスを実装しているかどうかを確認することで、サーバー プッシュをサポートしているかどうかを判断できます。
たとえば、app.js がページのレンダリングを要求されることをサーバーが認識している場合、http.Pusher が利用可能な場合、ハンドラーはプッシュを開始できます。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if pusher, ok := w.(http.Pusher); ok { // Push is supported. if err := pusher.Push("/app.js", nil); err != nil { log.Printf("Failed to push: %v", err) } } // ... })
上記の紹介を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイト
その他の 実行中のJSエンジンはどのように見えるかネイティブJSがAJAXとJSONPを実装する方法JSの使用中にコンソールオブジェクトをカスタマイズする方法以上がHTTP/2サーバープッシュについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。