Http協議中的Content-Length屬性


   Android開發的時候需要與從服務器上獲取數據,數據是通過http協議封裝的。Android端使用的是Xutils第三方插件來發起http請求,但是每次只能拿到部分數據。通過仔細分析后原來是Content-Length屬性的問題。Content-Length屬性是用來說明傳輸的正文大小。下面就仔細描述一個整個過程。

無Content-Length屬性


服務器端

<?php
    $filePath = 'app/'.$_GET['item'];
    header("Content-type: text/html; charset=utf-8"); 
    $size = filesize($filePath);
    $str = file_get_contents($filePath);
    echo $str;

服務器端根據請求的文件名來返回相應文件的內容。

瀏覽器中的響應頭

image

瀏覽器中響應頭中沒有Content-Length屬性來說明數據的大小。但是有個Transfer-Encoding屬性,它的作用是當傳輸數據的大小不確定時通過chunked(片)的方式進行傳輸。這種方式可以保證瀏覽器可以拿到全部的數據。但是在Android中就沒有這么幸運。

XUtils插件

使用該插件時無法從服務器上獲取完整的數據。服務器上發送的數據是完整的json數據,因為服務器端的日志顯示是200代碼,但是客戶端並沒有將所有數據全部拿到。客戶端只拿到了部分數據,如下圖所示

image

有Conent-Length屬性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM