HTTP网络知识总结

1. HTTP基本介绍

HTTP协议:是种超文本传输协议(请求/响应协议)。它是建立在TCP上无状态单向链接协议(属于TCP/IP协议族中一员)。它规定客户端发送什么样的数据给服务器端(HTTP请求),并且服务器端需要返回什么样的数据(HTTP响应);注意一个完整的HTTP请求/响应,并不只是通过HTTP协议来实现的。而是由多个协议相互协作实现的;
在这里插入图片描述

  1. HTTP请求/响应
  2. HTTP握手和挥手
  3. 网络TCP/IP分层模型
  4. HTTP版本发展史
1. HTTP请求和响应

HTTP请求是由客户端发起的动作,告诉服务器需要什么数据。这一过程称之为HTTP请求。服务器接收到HTTP请求后,作出相应的处理,返回HTTP请求所需要的数据。这一过程称之为响应;如图所示:
在这里插入图片描述
不管是HTTP请求/响应,它们的结构一般分为3层。请求行/响应行、请求头/响应头、请求主体/响应主体。这3层结构组成统称为请求/响应报文;

HTTP请求结构

1. 请求行:主要由请求方式GET/POST/PUT等、对应的URL地址,HTTP协议和协议版本组成;
2. 请求头:主要由若干属性组成,包含用户代理、cookie等用户信息;
3. 请求主体:主要是给服务器端发送的数据。

HTTP响应结构

1. 响应行:HTTP协议、协议版本、状态码和状态描述组成;
2. 响应头:主要由若干属性组成,包含数据类型(content-type)、数据长度(content-length)等信息;
3. 响应主体:主要反馈给客户端的数据信息(JSON数据、图片、音频等数据);
2. HTTP的握手和挥手

每个完整的HTTP请求,客户端都会发起3次握手和4次挥手动作。3次握手是发生在HTTP连接建立阶段;4次挥手发生在HTTP连接断开阶段;如图所示:
在这里插入图片描述

1. 3次握手

第一次握手:客户端在TCP中准备SYN标志位1,并初始化序号为X发送给服务器端;

第二次握手:服务器端接收到客户端的报文,就准备确认包(ACK)应答。ACK和SYN标志位都为1,同时初始化序号Y,将客户端的发送序号置于X+1。响应给客户端;

第三次握手:客户端接收到服务器响应,将服务器序号Y+1,准备确认包(ACK)应答(ACK标志位1,SYN标志位0),同时发送序号Z给服务器端做最后的确认,并建立链接;

2. 4次挥手

第一次挥手:客户端发送一个FIN,用来关闭服务端到Server的数据传送,客户端进入FIN_WAIT_1状态。

第二次挥手:服务端 收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态

第三次挥手:服务端发送一个FIN,用来关闭Server到Client的数据传送,服务端进入LAST_ACK状态。

第四次挥手:客服端收到FIN后,服务端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

总结过程:客户端发送HTTP请求时,会经过3次握手阶段确认连接的建立,连接建立成功后,就开始传递数据并获取服务器的响应。接收响应结束后,又会经过4次挥手阶段,确认连接的断开;

好比我们需要去朋友那拿点东西,先打电话过去确认朋友在不在家,如果朋友在家,我们再过去拿东西(这样就可以避免朋友不在家,白跑一趟)。拿到东西后,就告诉朋友不需要再拿东西。朋友知道后就会做其他事情了。不用等着我们了;

通过该过程可知HTTP请求对于服务器端属于被动的,它不能主动发送任何数据给客户端,它必须等待客户端请求才能做出相应的反馈。同时HTTP又是无状态的,服务器端不知道客户端是不是第N次访问。

3. 网络TCP/IP分层模型

网络模型中有OSI七层模型和TCP/IP四层模型。由于OSI模型过于复杂,在网络中只做理论参考,实际应用场景中,TCP/IP模型应用广泛,已经成为互联网的实施标准。所以这里直接上TCP/IP模型;如下图所示:
在这里插入图片描述

TCP/IP四层模型
对应网络协议
应用层
HTTP、TFTP, FTP, NFS, WAIS、SMTP
Telnet, Rlogin, SNMP, Gopher
SMTP, DNS
传输层
TCP, UDP
网络层
IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层
FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
IEEE 802.1A, IEEE 802.2到IEEE 802.11

(来自:https://blog.csdn.net/xuedan1992/article/details/80958522)

  1. 应用层:该层更加协议不同决定提供用户不同的应用服务。例如FTP文件传输协议提供文件上传/下载功能;HTTP超文本协议,提供对多种不同类型网络数据的访问;
  2. 传输层:为应用层提供端到端的通信,保证了数据包的顺序性和完整性的传输;
  3. 网络层:将用户传输的数据进行整理成数据包,以数据包的形式在网络中传输;
  4. 数据链路层:将物理层的数据比特流封装成帧,控制帧在物理信道上的传输,包括纠错,调节发送速率等。另外还提供了两个主机之间数据链路的建立,维持和释放的管理工作;
4. HTTP版本发展史

1. HTTP 0.9版本:这一阶段的HTTP提供的功能及其有限。在这一版本只能使用GET方式请求,然后请求完毕之后立即关闭连接。

2. HTTP 1.0版本:该版本新增HEAD和POST请求方式,还支持多种不同的数据类型,不再局限于文本;同时新增了状态码概念,用来标记报错原因;但是该版本只能串行发送请求,不能多个请求同时发送,并且不支持keepalive;

3. HTTP 1.1版本:这一版本利用管道技术实现多请求同时发送(支持并行请求),同时还支持keepAlive,减少了握手/挥手次数,提高了服务器性能;该版本也是目前主流版本;

4. HTTP 2.0版本:该版本支持真正意义上的并行请求,同时支持双全工通信。也就是服务器端也可以主动发送数据给客户端。不再是被动发送了。

5.补充说明
  • 管道技术:可以将多个HTTP请求统一放置一个TCP中发送,不用等待前一个HTTP响应之后再发送。但是对于单进程I/O模型来说,这种方式并没有优化HTTP请求。虽然管道技术实现了并行HTTP请求,但是响应结果还是按照发送HTTP请求的顺序来接收的;

  • keepAlive介绍:在这分为TCP keepAlive和HTTP keepAlive这两种。

  1. TCP keepAlive是为了检测链接的可用性;主要参数如下:
tcp_keepalive_time // 距离上次传送数据多少时间未收到判断为开始检测
tcp_keepalive_intvl // 检测开始每多少时间发送心跳包
tcp_keepalive_probes // 发送几次心跳包对方未响应则close连接

当经过3次握手建立链接之后,如果客户端关闭,服务器未收到反馈,就会发送空心跳包去检查链接是否可用。如果不可用就关闭连接;

  1. HTTP keepAlive是为了告诉服务器HTTP请求完之后不要关闭连接,因为在4次挥手之后服务器会首先关闭连接。,以减少3次握手和4次挥手次数,提高HTTP请求效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值