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)
对比:同步 属于一请求一回复的形式,异步属于大量请求并行不等待结果,线程回调中得到结果。如下图。
同步实现请求 异步请求与回复
网友评论