1. 程式人生 > >HTTP響應Chunked編碼

HTTP響應Chunked編碼

最近公司有個應用要為第3方系統提供介面,大概要求就是對方向我方系統傳送一個XML報文,我方根據請求報文響應資料,並以XML格式進行返回.測試的時候發現一個比較詭異的問題,有時候請求響應會無故多生成一些沒有規律的字串,並且這些字串都在響應的body頭部,由於響應是XML格式的,這些多餘字串在XML檔案的<xml>標籤之前,導致返回的XML檔案無法得到正確解析.

問題現象

使用Fire Bug檢測響應頭和Body截圖如下:

Http Chuncked編碼

問題原因

原來HTTP協議規定客戶端有兩種方式接收響應,HTTP響應一次返回資料,客戶端根據響應頭的Content-Length值確定響應長度,即客戶端應接收的內容長度;另一種情況是一個HTTP請求分多次返回響應內容,每個返回包返回一定長度的“內容塊”,直到最後接到一個長度為“0“的包結束響應。

通常,HTTP協議中使用Content-Length這個頭來告知報文的長度。然後,在資料下行的過程中,Content-Length的方式要預先在伺服器中快取所有資料,然後所有資料再一股腦兒地發給客戶端。

如果要一邊產生資料,一邊發給客戶端,WEB 伺服器就需要使用”Transfer-Encoding: chunked”這樣的方式來代替Content-Length。

由於第3方系統強制要求,服務端必須返回Content-Length頭,所以在解析的時候,由於採用Transfer-Encoding:chunked方式返回,Content-Length=0,由於第3方系統無法正確確定報文的長度,導致多餘字串的生產。

CHUNKED編碼

般HTTP通訊時,會使用Content-Length頭資訊性來通知使用者代理(通常意義上是瀏覽器)伺服器傳送的文件內容長度,該頭資訊定義於HTTP1.0協議RFC 1945 10.4章節中。瀏覽器接收到此頭資訊後,接受完Content-Length中定義的長度位元組後開始解析頁面,但如果服務端有部分資料延遲傳送嗎,則會出現瀏覽器白屏,造成比較糟糕的使用者體驗。

解決方案是在HTTP1.1協議中,RFC 2616中14.41章節中定義的Transfer-Encoding: chunked的頭資訊,chunked編碼定義在3.6.1中,所有HTTP1.1 應用都支援此使用trunked編碼動態的提供body內容的長度的方式。進行Chunked編碼傳輸的HTTP資料要在訊息頭部設定:Transfer-Encoding: chunked表示Content Body將用chunked編碼傳輸內容。根據定義,瀏覽器不需要等到內容位元組全部下載完成,只要接收到一個chunked塊就可解析頁面.並且可以下載html中定義的頁面內容,包括js,css,image等。



相關推薦

HTTP響應Chunked編碼

最近公司有個應用要為第3方系統提供介面,大概要求就是對方向我方系統傳送一個XML報文,我方根據請求報文響應資料,並以XML格式進行返回.測試的時候發現一個比較詭異的問題,有時候請求響應會無故多生成一些沒有規律的字串,並且這些字串都在響應的body頭部,由於響應是XML格式的

【協議分析】HTTP響應頭中的2種編碼方式介紹

href intro feo 發送 文檔 bsp firefox cep 目前 HTTP 1.1中有兩個實體頭(Entity-Header)直接與編碼相關,分別為Content-Encoding和Transfer-Encoding。 先說Content-Encodin

HTTP 響應編碼

如果能 content 相關 功能 導致 個數 以及 last 監視器 HTTP狀態碼分類 HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型: HTTP狀態碼分類 分類分類描述 1** 信息,

HTTP協議中的Tranfer-Encoding:chunked編碼解析

    當不能預先確定報文體的長度時,不可能在頭中包含Content-Length域來指明報文體長度,此時就需要通過Transfer-Encoding域來確定報文體長度。    通常情況下,Transfer-Encoding域的值應當為chunked,表明採用chunked編碼方式來進行報文體的傳輸。chun

http協議中content-length 以及chunked編碼分析

轉載請註明出處 http://blog.csdn.net/yankai0219/article/details/8269922  0.序 1.http/1.1協議中與chunked編碼的相關欄位 1)Entity Body 2)Content-length 3)Messa

http協議以及chunked編碼分析

4xx-客戶端錯誤 發生錯誤,客戶端似乎有問題。例如,客戶端請求不存在的頁面,客戶端未提供有效的身份驗證資訊。 400-錯誤的請求。 401-訪問被拒絕。IIS定義了許多不同的401錯誤,它們指明更為具體的錯誤原因。這些具體的錯誤程式碼在瀏覽器中顯示,但不在IIS日誌中顯示: 401.1-登入失敗。 4

fsockopen用feof讀取http響應內容的一些問題

content 錯誤 www http響應 pragma control 代碼 write warn 在前面三個例子中,都有這麽一段代碼: while (!feof($fp)) { // 讀取文件/數據 //$content .= fgets($fp, 1

(二)servlet處理Http響應

web nbsp 購物車 res 請求 head 自動 地址 發生 重定向:web服務器收到客戶端的請求後,通知客戶端發送一個新的請求到另一個房web服務器。   resp.sendRedirect("URL"); 特點:1)客戶端發送兩次請求 2)瀏

Http響應處理

head 組成 mime 客戶端 tco encoding ets 字節 out 軟件152 羅傑 1. Http響應內容: a) 響應狀態:狀態碼和狀態信息組成 i. 狀態碼: 1. 1XX:用於指定客戶端應響應的某些動作 2. 2XX:用於

常用http響應報文分析

try 無法 郵件地址 常用 長度 tran index.jsp arch val 這是我在使用Asp.Net的時候,整理的的一些關於Http響應報文的分析筆記,零零散散的記錄, 現在貼出來,拋磚引玉,如果有什麽不對或者不嚴謹的地方,請各位大神不吝賜教. 一、HTTP響應碼

正確處理下載文件時HTTP頭的編碼問題(Content-Disposition)

robot shel 回歸 發布 合並 市場 ots 例子 int 轉自:https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/ 最近在做項目時遇到了一個 case

【python】獲取http響應

ont 如果 perror header port turn bsp set obj 一個相對完整的http請求,輸入ip和端口,輸出響應碼,響應頭,響應體,是否超時,以及出錯時的錯誤信息 處理包括: 1.協議處理,如果是443用https,其他用http 2.HTTPEr

HTTP響應狀態碼【總結】

管理 指示 get 強制 opp 帶寬 行修改 accepted 代碼 常見的狀態碼【1XX】表示【消息】【2XX】表示【成功】【3XX】表示【重定向】【4XX】表示【請求錯誤】【5XX】表示【服務器端錯誤】200:OK。請求被正常處理204:No Content。請求被受

http響應狀態碼

accepted html 數據 fin 能夠 err 新的 指示 found 文章摘自:http://hi.baidu.com/starsecond/blog/item/de75458a3cb1b51ac9fc7a6a.html =====================

HTTP響應報文結構

必須 ont rst enc image etc cache odi 指定 HTTP響應報文由三部分組成:響應行、響應頭、響應體。 一、響應行:協議版本+狀態碼+描述   常見狀態碼:   100-199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過

【APP接口開發】常用HTTP響應頭狀態碼詳解

服務器 客戶端 http app 狀態 不存在 性能 添加 但是 1、200 OK,客戶端請求城成功 2、400 Bad Request ,客服端請求語法錯誤,服務器無法理解和處理 3、401 unauthorized,請求未通過認證 4、403 permission fo

HTTP響應的結構是怎麽樣的?

字節 主體 .cn com 檢索 安全 分組 如何 stat HTTP響應由三個部分組成:狀態碼(Status Code):描述了響應的狀態。可以用來檢查是否成功的完成了請求。請求失敗的情況下,狀態碼可用來找出失敗的原因。如果Servlet沒有返回狀態碼,默認會返回成功的狀

HTTP請求格式和HTTP響應格式

uri private req upn 6.0 cti sts jpg set HTTP請求格式 "GET {} HTTP/1.1\r\nhost: {}\r\nConnection\r\n\r\n".format(path, host) Request H

深入Nginx之《HTTP請求報文與HTTP響應報文》

分組 value align 後端服務 請求超時 odin cep 問題 ati HTTP請求報文 這個很有必要了解,好歹我們得知道Nginx在提供HTTP服務時,客戶端都會傳些什麽。HTTP請求中客戶端傳送的內容稱為HTTP請求報文。 1、請求行包含: 請

ttp響應chunked格式分析

計數器 decimal 記錄 nco amp bytes 正文 tle 十六進制 有的時候服務器生成HTTP回應是無法確定信息大小的,這時用Content-Length就無法事先寫入長度,而需要實時生成消息長度,這時服務器一般采用Chunked編碼。 在進行Chunked