HTTP1.1请求和响应的基本用法

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接口来实现:

技术分享

 

 

对于响应:

技术分享

 

详细内容自行看源码即可。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。