这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
什么是HTTP
当服务端建立起与客户端的TCP连接之后,服务器会持续监听客户端发起的请求,接下来客户端会发起HTTP请求,HTTP请求内容包括请求方法、请求资源等,服务器收到请求后会回复,回复内容包括HTTP状态以及相应信息。
网络请求的过程包括两个步骤:客户端发送请求,服务器返回响应。这就是HTTP 协议的主要特点:遵循经典的“客户端-服务端”模型。 从 HTTP/1.0、HTTP/1.1,到 HTTP/2、HTTP/3,HTTP 协议在保持协议简单性的同时,拓展了灵活性,提供越来越快、更加可靠的传输服务。 HTTP2以前HTTP是语义可读的:
-
HTTP 请求方法:代表着客户端的动作行为(GET-获取资源/POST-提交资源/PUT-修改资源/DELETE-删除资源)
-
HTTP 状态码:代表着当前请求的状态(1XX-提示信息/2XX-成功/3XX-重定向/4XX-客户端错误/5XX-服务端错误)
-
HTTP 消息头:客户端和服务端通过request和response传递附加信息。
通过HTTP的信息可以看到请求是否成功,错误原因是什么,请求是否用了缓存,请求和响应数据是否符合预期。
HTTP演变过程
- HTTP/1.0 到 HTTP/1.1,主要实现了对 TCP 连接的复用。在HTTP/1.0 中,每一对HTTP请求响应都需要打开一个单独的TCP连接,这样非常消耗资源,因此在HTTP/1.1中引入了持久连接概念,通过设置Connection和keep-alive的方式,让TCP连接可以持久连接,客户端就可以::在已经建立的TCP连接上,长时间对同一服务器发起请求::。
- HTTP/1.1 到HTTP/2 ,主要实现了多个请求的复用。HTTP/2通过将HTTP消息拆分独立的帧,进行交错发送,实现了在::同一个连接并行发送多个请求:: ,用来减少网络请求的延迟,为了实现多路复用,::HTTP/2协议的头部进行了二进制编码,不再像之前版本的HTTP语义可读::。除此以外,HTTP2还实现了Header压缩,服务端主动推动,流优先级等能力。
- HTTP/2 到 HTTP/3,主要实现了基于UDP协议,实现了更快的传输。HTTP/3 使用了基于 UDP 的 QUIC 协议,实现了又快又可靠的传输。因为::UDP 协议中没有错误检查内容,因此可以更快地实现通信::。同时,::QUIC 协议负责合并纠错、重建丢失的数据,解决了 UDP 协议传输丢包的问题::。