HTTP协议(超文本传输协议)定义了Web客户端如何从Web服务器请求Web界面,以及服务器如何把Web界面传送给客户端。

HTTP是不保存状态的协议,既无状态协议,协议本身对于请求或响应之间的通信状态不进行保存,因此连接双方都不能知晓对方当前的身份和状态。

HTTP协议采用请求/响应模型。
客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。

服务器以一个状态行作为回应,响应的内容包括协议的版本、成功或者错误的代码、服务器信息、响应头部和响应数据。

TCP/IP协议族:

链路层、网络层、传输层、应用层
应用层规定了向用户提供应用服务时通信的协议。TCP/IP协议族内预存了各类通用的应用服务协议,FTP,DNS,HTTP。
传输层提供处于网络中的两台计算机之间的数据传输所用的协议。传输层中有两个性质不同的协议。

tcp(传输控制协议):tcp发送和接收数据是同步的。tcp协议在建立和断开连接时有三次握手和四次挥手,因此在传输的过程中稳定可靠。
udp(用户数据包协议):udp协议是面向无连接的,在正式传递数据之前不需要建立连接,udp协议不保证有序且不丢失的传递到对端,不够稳定。

网络层规定了数据通过怎样的传输路线达到对方计算机传送给对方。
链路层用来处理连接网络的硬件部分。

HTTP/1.0

最早的http只是使用在一些较为简单的网页和网络请求上。每次请求都打开一个新的TCP连接,收到响应之后理解断开连接。

HTTP/1.1

http/1.1引入了更多的缓存控制策略
http/1.1允许范围请求,即在请求头中加入Range头部
http/1.1的请求和响应信息都必须包含host头部,以区分同一个物理主机中的不同虚拟主机域名
http/1.1默认开启持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

HTTP/2.0

新的二进制格式:http/1.x的解析是基于文本的,基于文本协议的解析是存在天然缺陷的,文本的表现形式有多样性,要做到全面性考虑的场景必然很多。二进制则不同,只识别0和1的组合。http/2.0采用二进制格式,方便且强大。
多路复用:多路复用允许并发的发起多个请求,每个请求及该请求的响应不需要等待其他请求或响应,避免了线头阻塞的问题。这样某个请求任务耗时严重,不会影响到其他连接断正常执行,极大地提高传输性能。
头部压缩:http/1.x的请求和响应头携带有大量信息,而且每次请求都要重复发送,http/2.0使用encoder来减少要传输的头部的大小。通讯双方各自cache一份头部fileds表,既避免了重复头部的传输,又减小了需要传输的大小。
服务端推送:把客户端所需要的css/js/img资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。

HTTP/3.0

避免包阻塞:基于UDP协议的QUIC协议中,不同的数据流之间的数据传输真正实现了相互独立互不干扰,某个流的数据包在出问题需要重传时,并不会对其他的数据包传输产生影响。
快速重启会话:在网络切换时,ip会改变,改变ip就会导致tcp连接冲重新创建。而QUIC协议使用特有的UUID来标记每一次连接,在网络环境发生变化的时候,只要UUID不变,就能不需要握手,继续传输数据。

WebSocket是HTML5提出的一种客户端和服务端通讯的全双工协议,由客户端发起请求,建立连接之后不仅客户端可以主动向服务端发送请求,服务端也可以主动向客户端推送信息。


王超
42 声望1 粉丝

世间美好,与你环环相扣。