客戶機與服務器需要某種方式來標示一個報文在哪里結束和在下一個報文在哪里開始。
一般使用Content-Length表示body報文體的長度,這樣往后截取即可獲得整個報文。對於普通的頁面、圖片皆可使用。
報文頭中的Transfer-Encoding: chunked ,表示報文體body是使用chunked分塊方式拼接成的,不需要Content-Length指明長度。不需要提前計算總長度。
uploading-image-355497.png
Chunked編碼使用若干個Chunk串連而成,由一個標明長度為0的chunk標示結束。
每個Chunk分為頭部和正文兩部分。頭部內容指定下一段正文的字符總數(十六進制的數字)和數量單位(一般不寫);正文部分就是指定長度的實際內容。兩部分之間用回車換行(CR&LF)隔開。
最后一個長度為0的Chunk中的內容是稱為footer的內容,是一些附加的Header信息(通常可以直接忽略)。
解析:這里面只有一個有意義的chunke以及一個footer。第一個chunk,頭部是3134這兩個字節,表示的是1和4這兩個ascii字符,被http協議解釋為十六進制數14,也就是十進制的20。
后面緊跟0d0a,再接着是20個字節的chunk正文(圖中的011e~0131)。后面再接着0d0a。
然后就是footer了,30表示ascii字符0,http解釋為長度是0(也說明了這是最后一個chunk),后面緊跟0d0a,然后正文部分為空,再接0d 0a表示footer結束