2017-11-14 7 views
0

要求されたコンテンツが既に配信された後でコンテンツをクライアントにプッシュできますか?次のようにコンテンツの配信後にHTTP2プッシュ

This Wikipedia articleは、フレームのシーケンスを説明しています

  1. Serverはストリーム3にindex.htmlをを求めHEADERSフレームを受信した...
  2. ServerはStyles.cssをしてPUSH_PROMISEためPUSH_PROMISEを送信しますscript.jsの場合、再びストリーム3 ...
  3. サーバーは、index.htmlの要求に応答するためにストリーム3でHEADERSフレームを送信します。
  4. Serverはストリーム3に
  5. サーバが応答のヘッダフレームを送信ストリーム4
  6. ServerでStyles.cssをする応答のヘッダフレームを送信し、index.htmlの内容を有するデータフレーム(複数可)を送信します
  7. サーバは、それぞれのストリーム番号を使用して、styles.cssおよびscript.jsの内容のDATAフレームを送信します。

例えば、私はオープンストリーム3を維持し、私はindex.htmlをのためのデータフレーム(複数可)を送信し、その後PUSH_PROMISEフレームを送信した後ことができ、場合、私は思っていました。任意の応答のための

感謝:)

答えて

1

それは要求されたコンテンツがすでに提供された後、クライアントにコンテンツをプッシュすることは可能ですか?

回答は、回答が「いいえ」、6.6に基づいていると思います。

PUSH_PROMISEフレームのみが「オープン」または「半分閉じた(リモートのどちらかであるピアが開始したストリーム に送らなければなりません:RFC 7540.でPUSH_PROMISEはここでは関係引用(強調鉱山)です) "状態。 のPUSH_PROMISEフレームのストリーム識別子は、 が関連付けられているストリームを示します。ストリーム識別子フィールドが 値0x0を指定するなら、受取人はタイプPROTOCOL_ERRORの接続エラー (セクション5.4.1)で応答しなければなりません。例えば、私はオープンストリーム3を維持し、私はindex.htmlをのためのデータフレーム(複数可)を送信し、その後PUSH_PROMISEフレームを送信した後ことができ、場合、私は思っていた

:バックあなたの質問に

。ここで

は、これらの線に沿って、私はあなたができると信じて何かを、です:あなたは、このように維持END_STREAMフラグをストリーム3 のためにすべてのDATAフレームを送信が、ご遠慮可能性があり、クライアントはまだコンテンツを待っていることになることを意味しています( )。 PUSH_PROMISEを送信してから、END_STREAMが空の(長さゼロの)DATAフレームをストリーム3に送信します。ただし、それが役に立つと思われるシナリオは考えられません。

+0

ほとんどのブラウザでは、プッシュされたコンテンツを接続内の他のストリームに使用できますが、プッシュされたコンテンツは1回のみ使用されます。 「接続が終了すると、バイバイキャッシュ」および「プッシュキャッシュ内のアイテムは一度しか使用できません」を参照してください。https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/競合状態クライアントがhtmlを解析し、それが実現する前にcss/jsを要求するということです。これが役に立つと思われる唯一のシナリオは、約束されたコンテンツを後で使用する可能性**を高めたい場合です。 – lf215

関連する問題