content-length與Transfer-Encoding: chunked的問題釋疑

http返回頭中content-length與Transfer-Encoding: chunked的問題釋疑 先說說問題出現的背景: 公司服務器與手機客戶端交互,客戶端請求一個動態生成的XML文件,在用firebug查看http響應頭的時候,有時候發現有content-length屬性,有時候沒有這個屬性,取而代之的是Transfer-Encoding: chunked屬性。因爲客戶端強制要求,服務器端必須返回content-length,不然,客戶端將不予解析。因而測試發現,當XML文件很小的時候,是有content-length屬性的,到達一個值時,就成了Tansfer-Encoding:chunked。 再引用一段話,解釋一下Transfer-Encoding:chunked這個屬性的意義: 一般,HTTP協議中使用Content-Length這個頭來告知數據的長度。而後,在數據下行的過程當中,Content-Length的方式要預先在服務器中緩存全部數據,而後全部數據再一古腦兒地發給客戶端。 若是要一邊產生數據,一邊發給客戶端,WEB 服務器就須要使用"Transfer-Encoding: chunked"這樣的方式來代替Content-Length。 最後說說本身的理解與解決方式: 經過種種跡象,我得出的結論是,JSP頁面有一個緩存大小,當輸出數據的長度沒有到達這個大小的時候,服務器是知道總的數據長度的,因此服務器會輸出content-length頭。但若是超過緩存大小,那麼,緩存一滿,服務器就得輸出內容給客戶端,因此,不能判斷整個內容的大小,因而返回Transfer-Encoding:chunked這個頭信息。 解決方式是:在JSP頁面中加入代碼,response.setBufferSize(402800);40820即400K,其實只要這個值大於你返回的數據的大小就好了。具體設置多少,你能夠根據實際狀況,合理配置。另外說一句,在page指令中加入buffer="400kb",是無論用的緩存

相關文章
相關標籤/搜索