zoukankan      html  css  js  c++  java
  • 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属性

  • 相关阅读:
    Activity
    日志
    StringBuffer
    内部类
    接口
    多态
    final关键字
    abstract关键字
    对象初始化
    继承
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5938888.html
Copyright © 2011-2022 走看看