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)
瑙i噴錛?br />
Chunked-Body琛ㄧず緇忚繃chunked緙栫爜鍚庣殑鎶ユ枃浣撱傛姤鏂囦綋鍙互鍒嗕負chunk, last-chunk錛宼railer鍜岀粨鏉熺鍥涢儴鍒嗐俢hunk鐨勬暟閲忓湪鎶ユ枃浣撲腑鏈灝戝彲浠ヤ負0錛屾棤涓婇檺錛涙瘡涓猚hunk鐨勯暱搴︽槸鑷寚瀹氱殑錛屽嵆錛岃搗濮嬬殑鏁版嵁蹇呯劧鏄?6榪涘埗鏁板瓧鐨勫瓧絎︿覆錛屼唬琛ㄥ悗闈hunk-data鐨勯暱搴︼紙瀛楄妭鏁幫級銆傝繖涓?6榪涘埗鐨勫瓧絎︿覆絎竴涓瓧絎﹀鏋滄槸“0”錛屽垯琛ㄧずchunk-size涓?錛岃chunk涓簂ast-chunk,鏃燾hunk-data閮ㄥ垎銆傚彲閫夌殑chunk-extension鐢遍氫俊鍙屾柟鑷紜畾錛屽鏋滄帴鏀惰呬笉鐞嗚В瀹冪殑鎰忎箟錛屽彲浠ュ拷鐣ャ?br />
trailer鏄檮鍔犵殑鍦ㄥ熬閮ㄧ殑棰濆澶村煙錛岄氬父鍖呭惈涓浜涘厓鏁版嵁錛坢etadata, meta means "about information"錛夛紝榪欎簺澶村煙鍙互鍦ㄨВ鐮佸悗闄勫姞鍦ㄧ幇鏈夊ご鍩熶箣鍚庛?br />
瀹炰緥鍒嗘瀽錛?br />
涓嬮潰鍒嗘瀽鐢╡thereal鎶撳寘浣跨敤Firefox涓庢煇緗戠珯閫氫俊鐨勭粨鏋滐紙浠庡ご鍩熺粨鏉熺鍚庡紑濮嬶級錛?br />
Address 0.......................... f
000c0 31
000d0 66 66 63 0d 0a ............... // ASCII鐮?1ffc\r\n, chunk-data鏁版嵁璧峰鍦板潃涓?00d5
寰堟槑鏄撅紝“1ffc”涓虹涓涓猚hunk鐨刢hunk-size,杞崲涓篿nt涓?188.鐢變簬1ffc鍚庨┈涓婂氨鏄?br />
CRLF,鍥犳娌℃湁chunk-extension.chunk-data鐨勮搗濮嬪湴鍧涓?00d5, 璁$畻鍙煡涓嬩竴鍧梒hunk鐨勮搗濮?br />
鍦板潃涓?00d5+1ffc + 2=020d3,濡備笅錛?br />
020d0 .. 0d 0a 31 66 66 63 0d 0a .... // ASCII鐮?\r\n1ffc\r\n
鍓嶄竴涓?d0a鏄笂涓涓猚hunk鐨勭粨鏉熸爣璁扮錛屽悗涓涓?d0a鍒欐槸chunk-size鍜宑hunk-data鐨勫垎闅旂銆?br />
姝ゅ潡chunk鐨勯暱搴﹀悓鏍蜂負8188, 渚濇綾繪帹錛岀洿鍒版渶鍚庝竴鍧?br />
100e0 0d 0a 31
100f0 65 61 39 0d 0a...... //ASII鐮侊細\r\n\1ea9\r\n
姝ゅ潡闀垮害涓?x1ea9 = 7849, 涓嬩竴鍧楄搗濮嬩負100f5 + 1ea9 + 2 = 11fa0,濡備笅錛?br />
100a0 30 0d 0a 0d 0a //ASCII鐮侊細0\r\n\r\n
“0”璇存槑褰撳墠chunk涓簂ast-chunk, 絎竴涓?d 0a涓篶hunk緇撴潫絎︺傜浜屼釜0d0a璇存槑娌℃湁trailer閮ㄥ垎錛屾暣涓狢hunk-body緇撴潫銆?br />
瑙g爜嫻佺▼錛?br />
瀵筩hunked緙栫爜榪涜瑙g爜鐨勭洰鐨勬槸灝嗗垎鍧楃殑chunk-data鏁村悎鎭㈠鎴愪竴鍧椾綔涓烘姤鏂囦綋錛屽悓鏃惰褰曟鍧椾綋鐨勯暱搴︺?br />
RFC2616涓檮甯︾殑瑙g爜嫻佺▼濡備笅錛?浼唬鐮侊級
length := 0 //闀垮害璁℃暟鍣ㄧ疆0
read chunk-size, chunk-extension (if any) and CRLF //璇誨彇chunk-size, chunk-extension
//鍜孋RLF
while(chunk-size > 0 ) { //琛ㄦ槑涓嶆槸last-chunk
read chunk-data and CRLF //璇籧hunk-size澶у皬鐨刢hunk-data,skip CRLF
append chunk-data to entity-body //灝嗘鍧梒hunk-data榪藉姞鍒癳ntity-body鍚?br />
read chunk-size and CRLF //璇誨彇鏂癱hunk鐨刢hunk-size 鍜?CRLF
}
read entity-header //entity-header鐨勬牸寮忎負name:valueCRLF,濡傛灉涓虹┖鍗沖彧鏈塁RLF
while 錛坋ntity-header not empty) //鍗籌紝涓嶆槸鍙湁CRLF鐨勭┖琛?br />
{
append entity-header to existing header fields
read entity-header
}
Content-Length:=length //灝嗘暣涓В鐮佹祦紼嬬粨鏉熷悗璁$畻寰楀埌鐨勬柊鎶ユ枃浣搇ength
//浣滀負Content-Length鍩熺殑鍊煎啓鍏ユ姤鏂囦腑
Remove "chunked" from Transfer-Encoding //鍚屾椂浠嶵ransfer-Encoding涓煙鍊煎幓闄hunked榪欎釜鏍囪
length鏈鍚庣殑鍊煎疄闄呬負鎵鏈塩hunk鐨刢hunk-size涔嬪拰錛屽湪涓婇潰鐨勬姄鍖呭疄渚嬩腑錛屼竴鍏辨湁鍏潡chunk-size涓?x1ffc(8188)鐨刢hunk,鍓╀笅涓鍧椾負0x1ea9(7849),鍔犺搗鏉ヤ竴鍏?3353瀛楄妭銆?br />
娉細瀵逛簬涓婇潰渚嬪瓙涓墠鍑犱釜chunk鐨勫ぇ灝忛兘鏄?188,鍙兘鏄洜涓?"1ffc" 4瀛楄妭錛?\r\n"2瀛楄妭錛屽姞涓婂潡灝句竴涓?\r\n"2瀛楄妭涓鍏?瀛楄妭錛屽洜姝や竴涓猚hunk鏁翠綋涓?196,姝eソ鍙兘鏄彂閫佺涓嬈CP鍙戦佺殑緙撳瓨澶у皬銆?/p>