http chunked編碼格式

2021-06-19 22:03:34 字數 1157 閱讀 1768

http的響應資料由下面2部分構成:

響應頭 + 資料部分

資料部分的格式由響應頭說明

一般情況下,http的響應頭包含content-length域來指明資料的長度,例如:

通常使用chunked編碼進行傳輸的時候,會先將資料進行壓縮。http響應頭中的content-encoding域指明了壓縮格式。

當資料很大的時候,還會分多個塊(chunk)傳輸。chunked編碼的格式如下:

注意chunk資料長度的單位是位元組,不包括後面的\r\n。以乙個長度為0的塊作為結尾。

把所有的chunk資料部分組合起來存入檔案,就是乙個標準的gzip壓縮檔案。

怎麼樣把所有chunk資料部分提取出來呢?明白了上面的格式,其實就很簡單了。

如果我們是通過tcp接收的資料,首先要解決乙個問題:找到chunk資料開始的地方,上面提到chunk前面是http響應頭。其它先不管,響應頭是以連續的\r\n\r\n結尾的,這之後就是響應的資料部分。

假設我們有乙個buffer

char *m_contentdata;

裡面儲存著按序收到的所有響應資料。

可以通過如下方式移動到資料部分,即chunked資料開始的地方(下圖所示:從a移動到b)

定義char *m_gzipcontentdata儲存gzip資料,可以通過如下方式獲取到gzip資料,然後寫入檔案。

int len=0;

char ss[10];

char *p = m_contentdata;

char *q = m_gzipdata;

int gzip_len = 0;

while(1)

fwrite(m_gzipdata, 1, gzip_len, fp);

HTTP chunked傳輸如何表示結束

一般伺服器響應訊息都會在http響應頭部加上content length,這樣客戶端就知道要接收多少資料。這也要求一定要先傳送響應頭部,再傳送響應內容。但並不是所有場景都能事先知道響應包長度,比如動態頁面,事先並不知曉響應包大小,這樣也無法在響應頭部設定content length,這時可通過chu...

常見編碼格式(中文編碼)

中文編碼主要有以下四種 gb2312簡體中文編碼,乙個漢字占用2個位元組,在大陸是主要的編碼方式。當文章 網頁中包含正體中文 日文 韓文等時,這些內容可能無法被正確編碼。big5正體中文編碼,主要在台灣地區使用。gbk支援簡體及正體中文,但對他國非拉丁字母語言還是有問題。utf 8 unicode編...

MySQL編碼格式

mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。二 內容描述 那上面說了既...