今天在傳輸 json 物件時突然收到奇怪的訊息,當傳輸的json 大到一個程度,在html header 後面出現一組16進制數字,接著才是正常數據,最後還多了一個0
原來是該php 因為回傳的json 太大,自動觸發了分塊傳輸編碼(Chunked transfer encoding)
以下是維基百科的範例,當我們以\r\n\r\n 擷取header 之後的數據後,如果在header沒指定內容的長度時,當內容達到一定的數量,php 會自動改成此方式
每一個非空的塊都以該塊包含資料的位元組數(位元組數以十六進位表示)開始,跟隨一個CRLF (Enter及換行),然後是資料本身,最後塊CRLF結束。在一些實現中,塊大小和CRLF之間填充有白空格(0x20)。

我的解法1:
在該php 加上這兩行文字,表明該回傳的格式為json 與該json 的長度,這樣php 就不會轉換成分塊傳輸編碼
header('Content-Length: '.strlen($return));
header('Content-type: application/json');
我的解法2:
在request 時使用 HTTP/1.0,而不是 HTTP/1.1 ,因為此協議是 HTTP/1.1 定義的,這樣非常有效。
參考資料:https://zh.wikipedia.org/zh-tw/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81