2012-11-26 9 views
17

チャンクモードでデータを送信しようとしています。すべてのヘッダーが正しく設定され、それに応じてデータがエンコードされます。ブラウザは私の応答をチャンクされたものとして認識し、ヘッダを受け取り、データを受信し始めます。チャンク転送符号化 - ブラウザの動作

ブラウザは受信した各チャンクのページを更新すると予想していましたが、チャンクがすべて受信されるまで待ってからすべて表示します。これは期待される行動ですか?

受信した直後に各チャンクが表示されることを期待していました。 curlを使用すると、各チャンクは受信直後に表示されます。 GUIブラウザで同じことが起こらないのはなぜですか?彼らは何らかのバッファリング/キャッシュを使用していますか?

Cache-Controlヘッダーをno-cacheに設定しました。そのため、キャッシュについては不明です。

+0

あなたはどのブラウザを使用していますか?一般的に、ブラウザ_はインクリメンタルレンダリングを行いますが、中継は高価であるため、内部的にバッファリングすることができます... –

+0

どのような種類のデータをチャンクで送信していますか?それは単なるHTMLか、スクリプトデータを送信していますか? – qqx

+0

私は 'text/html'を送ります。 FirefoxとChromeで試しました。両方のチャンクがすべて受信されるのを待っています。 –

答えて

13

afaikブラウザでは、レンダリングチャンクを受信したときに開始するためにペイロードが必要です。
もちろん、カールは例外です。

最初のチャンクの前に約1KBの任意のデータを送信してください。

すべてを正しく実行している場合、ブラウザはチャンクを受信したときにレンダリングする必要があります。

+0

Yay !!!それだった! Firefox、Chrome、Safari、さらにはOperaでも完璧に動作します!大いに感謝する。 –

+0

ありがとう、あなたは私の一日を救った! – Jekis

+0

1KiBは確かに一般的な値です。詳しくはこちらをご覧ください:http://stackoverflow.com/q/16909227/1534459 – bodo

0

ブラウザは、データがチャンクされているかどうかにかかわらず、データを処理してレンダリングできます。ブラウザが応答データをレンダリングするかどうかは、データ構造の関数であり、どのような種類のバッファリングが採用されるかになります。例えばブラウザがイメージをレンダリングできるようにするには、ドキュメント(またはドキュメントの十分な部分)、スタイルシートなどが必要です。

チャンクは、リソースの応答が不明なときに役立ちますが生成され(「Content-Length」はレスポンスヘッダーに含めることはできません)、サーバーはリソースの転送後に接続を閉じることを望みません。

関連する問題