HTTP协议以及请求第三方数据的源码实现

2020-07-28  本文已影响0人  365_9163

HTTP协议是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

HTTP协议与TCP协议的关系:

    TCP属于传输层协议,HTTP属于应用层协议,HTTP协议是建立在TCP协议之上的。

HTTP之请求消息Request:

包含四部分:请求行,    请求头部,空行,请求数据

请求行:包括 请求类型 访问资源 HTTP版本,以\r\n结尾。

请求头部:用来说明服务器要要使用的附加信息以\r\n结尾。

空行: 请求头后面的空行是必须的。

请求数据:也叫主体,可以添加任意的其他数据。

HTTP之回复消息Response:

包含四部分:响应行,响应头部,空行,响应数据

响应行:HTTP版本 状态码 状态消息

响应头部:说明客户端要使用的一些附加信息。

空行:消息报头后面的空行是必须的

响应数据:服务器返回给客户端的文本信息

HTTP请求过程:

浏览器获取输入的域名后,向DNS请求解析域名的IP地址, 浏览器与服务器建立TCP连接,建立连接后 发出HTTP请求,服务器通过HTTP请求把信息发给浏览器,TCP连接释放,浏览器解析相关信息。

HTTP工作原理:

HTTP协议采用了请求/响应模型,客户端向服务器发送一个请求报文,强求报文包含请求的方法,URL,协议版本,请求头部和请求数据,服务器用一个状态行作为响应,响应的内容包括协议的版本,成功错误代码,服务器信息,响应头部和响应数据。

状态码:

 三位数字组成,第一个定义了响应的类别,总共五种类别

1xx:指示信息,表示请求已经接收,继续处理

2xx:成功,表示请求已被成功接收,

3xx:重定向-要完成请求必须进行更进一步的操作

4xx:客户端错误,请求有语法错误或者请求无法实现

5xx:服务器端错误,服务器未能实现合法的请求。

HTTP实现客户端请求数据源码实现:

实现一个访问第三方网站可以使用两种方式:同步 和异步

同步方式是:线程请求完之后一直等待数据的返回;

异步方式是:并行发送请求,回调中IO多路复用

同步与异步:形容两者之间的关系,异步返回是需要使用回调的。

阻塞与非阻塞:形容一个IO的状态的,read时候没有数据,此时IO会阻塞住,等待数据的到来。这时候应用程序与底层IO的数据是同步的关系。

同步实现流程:

     设置TCP连接(socket ,connect),封装HTTP包头(buffer,),发送数据到服务器(send(buffer.....)),等待服务器返回数据(select ,recv,),解析数据.

异步设计:需要一个线程 设置callback,IO多路复用监听IO数据的到来

1.初始化异步操作的上下文(线程的创建pthread_create,io多路复用的初始化创建等epoll_create  回调设置cb)。2.销毁异步操作上下文(pthread_cancel,close)3.向服务器发送一个请求(准备socket,connect,send,epoll_ctl将此socket加入到IO多路复用中)。4.回调函数(检测加到IO多路复用中的IO是否有数据 epoll_wait)

对比:同步 属于一请求一回复的形式,异步属于大量请求并行不等待结果,线程回调中得到结果。如下图。

同步实现请求 异步请求与回复

源码地址:http客户端请求第三方数据的同步及异步实现

上一篇 下一篇

猜你喜欢

热点阅读