來源:
http://blog.csdn.net/superhosts/article/details/8737434
http://bbs.csdn.net/topics/390384017
對於http的請求返回結果要進行內容的長度校驗主要有兩種方式:
1.客戶端在http頭(head)加Connection:keep-alive時,服務器的response是Transfer-Encoding:chunked的形式,通知頁面數據是否接收完畢,例如長連接或者程序運行中可以動態的輸出內容,例如一些運算比較復雜且需要用戶及時的得到最新結果,那就采用chunked編碼將內容分塊輸出。
2.除了如1所述之外的情況一般都是可以獲取到Content-Length的。
Content-Length如果存在並且有效的話,則必須和消息內容的傳輸長度完全一致。(經過測試,如果過短則會截斷,過長則會導致超時。)
如果存在Transfer-Encoding(重點是chunked),則在header中不能有Content-Length,有也會被忽視。
-----------------------------------------------------------------------------------------------------
Transfer-Encoding: chunked的意思是:一邊讀數據,一邊發給客戶端。不是一下傳輸。會帶這個頭信息。
Content-Length:則是,服務器內已經緩存了哪個說句,一下發送給客戶端會帶這個頭信息。
情況是這樣的,服務端是動態生成的,你在數據很小的時候,沒超過服務器的buffer大小的情況下
HTTP的header還沒傳輸過來,能夠把Content-Length傳輸過來。
在數據的大小超過buffer的情況下,服務器必須將HTTP Header和Entity(數據)flush到客戶端,這個時候,entity大小仍然未知,所以沒有Content-Length。