HTTP1.1是现在普遍使用的TCP/IP的应用层协议,按照Volley中的描述,可以把HTTP传输数据相关对象分为两个类,一个叫Request(请求),一个是Response(响应)。
对于一个基本的Request,我们通过chrome自带的查看工具来查看一下:
在地址栏输入:chrome://net-internals/#events
我们打开百度,然后在上述页面中找到URL_REQUEST:
查看内容是:
看着上面那个两个请求内容,我们来分析一下一个HTTP请求的基本内容如何构造。
HTTP使用TCP/IP协议建立连接和发送数据,对于一个建立了连接的线路,一端称为服务端,另一端称为客户端,HTTP请求就是在客户端发送给服务端来请求数据的一组数据。
请求报文格式:
对于请求行,格式是这样的:
请求类型(Method)[空格]URL[空格]HTTP版本
例如,对于百度www.baidu.com
请求行:GET www.baidu.com HTTP/1.1
method比较常用的有GET/POST..
对于头部,一般使用键值对,常用的键值对可以分为通用头部,请求头部,相应头部,一般这些数据标记了一些与请求或是响应的数据相关的时间,格式等。这些东西我也没都记住,就不介绍了。
我们来分析刚才对百度的请求:
可以看到,所有前面有:的都是请求行的内容,其他的都是头部的内容。
然后我们来看看响应的结构:
状态行的结构:
HTTP版本[空格]状态码[空格]状态短语
例如,对于一个成功的请求,返回的状态行是:
HTTP/1.1 200 OK
这里所说的状态码我们最熟悉的就是一个404, NOT FOUND的标记。
下面要说一下主体,这个主体为什么说是大部分都有呢?因为这个位置的内容就是客户端请求的数据,服务端将请求的数据在这里发送回来,但是某些情况下,因为在HTTP协议中定义了一个有关cache的内容,我们可以吧请求和响应对应起来,发生请求的时候携带一个本地是否有之前响应的缓存,如果有就与服务端的参数对比,如果没有更改,那么服务端返回的状态码是304,此时就不再返回主体数据,只需要从缓存中取出Entry即可。还有某些情况下4xx,5xx这些错误信息也是不携带主体的。
下面分析一下刚才对于访问百度返回的响应:
可以看到第一行就是响应的状态行,其他的都是头部信息,其中data/expires这些可以用来进行cache对比来判断是否有更改/更新,而且我们要知道,有一种部分更改的响应,在协议说明中,这种响应是和本地缓存进行合并返回给请求的。
下面我们来简要分析一下Volley的Request的结构:
因为是前期做的,可能有很多错误,请见谅。
只有Request是不能反映Volley如何进行请求的,我们还要结合Network接口来实现:
对于响应:
详细内容自行看源码即可。