国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

HTTP協議之Chunked解析

2024-04-27 14:59:44
字體:
來源:轉載
供稿:網友

網上使用Chunked編碼的網站似乎并不是很多,除了那些使用GZip壓縮的網站,例:google.com,還有就是大部分打開GZip壓縮的php論壇。

根據本人的理解,使用Chunked編碼的主要好處就在于一些程序的運算出過程中,可以動態的輸出內容。
例如,要在后臺處理一個小時的運算,但又不希望用戶等一個小時才能看到結果。這時就可采用Chunked編碼將內容分塊輸出,用戶隨時都可以接收到最新的處理結果。
asp關閉了緩存的輸出模式,就是Chunked編碼的。(Response.Buffer = false)
而每一次的Response.Write,都是一個Chunked,所以不要使用的太頻繁哦,否則Chunk數量太多,額外的數據太浪費空間了。
若想了解Chunked的具體編碼結構,用ASP關閉緩存調試蠻方便的。:)

我們先來看看RFC2616中對Chunked的定義:
Chunked-Body = *chunk
last-chunk
trailer
CRLF

chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF

chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)

我們來模擬一下數據結構:
[Chunk大小][回車][Chunk數據體][回車][Chunk大小][回車][Chunk數據體][回車][0][回車]

注意chunk-size是以十六進制的ASCII碼表示的,比如86AE(實際的十六進制應該是:38366165),計算成長度應該是:34478,表示從回車之后有連續的34478字節的數據。
跟蹤了www.yahoo.com的返回數據,發現在chunk-size中,還會多一些空格。可能是固定長度為7個字節,不滿7個字節的,就以空格補足,空格的ASCII碼是0x20。

以下是解碼過程的偽代碼:
length := 0//用來記錄解碼后的數據體長度
read chunk-size, chunk-extension (if any) and CRLF//第一次讀取塊大小
while (chunk-size > 0) {//一直循環,直到讀取的塊大小為0
read chunk-data and CRLF//讀取塊數據體,以回車結束
append chunk-data to entity-body//添加塊數據體到解碼后實體數據
length := length + chunk-size//更新解碼后的實體長度
read chunk-size and CRLF//讀取新的塊大小
}
read entity-header//以下代碼讀取全部的頭標記
while (entity-header not empty) {
append entity-header to existing header fields
read entity-header
}
Content-Length := length//頭標記中添加內容長度
Remove "chunked" from Transfer-Encoding//頭標記中移除Transfer-Encoding


有空再研究一下GZip+Chunked是如何編碼的,估計是每個Chunk塊進行一次GZip獨立壓縮。

使用了Chunked,自然會在性能上稍微打點折扣,因為比正常的數據體多出了一些額外的消耗。
但是有一些情況下,必需要使用分塊輸出,這也是不得已而為之.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 孟村| 新田县| 琼海市| 辛集市| 广河县| 陆川县| 沧州市| 左权县| 阳曲县| 乃东县| 上蔡县| 肃南| 邹平县| 陵水| 竹溪县| 恭城| 磴口县| 临安市| 大厂| 宜兰市| 葫芦岛市| 衡阳市| 郓城县| 富锦市| 班戈县| 南岸区| 石嘴山市| 全南县| 扬州市| 黑龙江省| 乐山市| 合阳县| 静宁县| 陆良县| 台前县| 出国| 姜堰市| 嘉兴市| 伊川县| 舟山市| 德化县|