2012-11-26 77 views
17

我試圖以分塊模式發送數據。所有標題設置正確,數據編碼相應。瀏覽器將我的響應識別爲分塊,接受標題並開始接收數據。塊傳輸編碼 - 瀏覽器行爲

我期待瀏覽器會更新每個接收到的塊的頁面,而不是等待,直到接收到所有的塊,然後顯示它們全部。這是預期的行爲?

我期待看到每個塊在收到後立即顯示。當使用curl時,每個塊在收到後立即顯示。爲什麼GUI瀏覽器不會發生這種情況?他們是否使用某種緩衝/緩存?

我將Cache-Control標頭設置爲no-cache,所以不確定它是關於緩存的。

+0

您在尋找哪些瀏覽器?一般來說,瀏覽器_將執行增量渲染,但它們可以在內部緩存一些東西,因爲傳播開銷很大...... –

+0

你在塊中發送什麼類型的數據?它只是HTML還是發送腳本數據? – qqx

+0

我發送'text/html'。嘗試在Firefox和Chrome上。都等待所有的塊被收到。 –

回答

13

afaik瀏覽器需要一些有效載荷來開始渲染塊,因爲他們收到。
捲髮當然是一個例外。

嘗試在第一個塊之前發送大約1KB的任意數據。

如果你正在做的一切正常,瀏覽器應該按照他們接收到的方式呈現塊。

+0

耶!就是這樣!在Firefox,Chrome,Safari,甚至Opera中都能完美運行!萬分感謝。 –

+0

謝謝你,你救了我的一天! – Jekis

+0

1KiB確實是一個很好的一般價值,更多細節請看這裏:http://stackoverflow.com/q/16909227/1534459 – bodo

0

瀏覽器可以處理和呈現數據,看它是否發送了數據。瀏覽器是否呈現響應數據將成爲數據結構的功能,以及它使用的緩衝類型。例如在瀏覽器可以呈現圖像之前,它需要擁有文檔(或者足夠的文檔),樣式表等。

在資源響應時資源的長度未知時,塊是最有用的(「Content-Length」不能包含在響應頭中),並且服務器不希望在資源轉移後關閉連接。