響應頭字段Transfer-Encoding:chunked
分塊編碼(Transfer-Encoding: chunked)
持續連接的問題:對於非持續連接,瀏覽器可以通過連接是否關閉來界定請求或響應實體的邊界;
而對於持續連接,這種方法顯然不奏效。有時,盡管我已經發送完所有數據,
但瀏覽器並不知道這一點,它無法得知這個打開的連接上是否還會有新數據進來,只能傻傻地等了。
用Content-length解決:計算實體長度,並通過頭部告訴對方。瀏覽器可以通過 Content-Length 的長度信息,判斷出響應實體已結束
Content-length引入的新問題:由於 Content-Length 字段必須真實反映實體長度,
但是對於動態生成的內容來說,在內容創建完之前,長度是不可知的。這時候要想准確獲取長度,
只能開一個足夠大的 buffer,等內容全部生成好再計算。但這樣做一方面需要更大的內存開銷,另一方面也會讓客戶端等更久。
我們需要一個新的機制:不依賴頭部的長度信息,也能知道實體的邊界——分塊編碼(Transfer-Encoding: chunked)
