HTTP框架学习 | 青训营后端

69 阅读4分钟

HTTP协议

1. HTTP是什么

HTTP是超文本传输协议,为HyperText Transfer Protocol。HTTP是计算机世界里面在两点之间传输文字、图片、音频等超文本数据的约定和规范。

2. HTTP包含内容

请求体

  • 请求方法(Method):表示要执行的操作,例如GET、POST、PUT、DELETE等。
  • 请求路径(URL):表示请求的资源路径。
  • 请求头(Headers):包含各种关于请求的元数据,例如User-Agent、Content-Type等。
  • 请求体(Body):用于传输数据到服务器,主要在POST、PUT等请求方法中使用。可以是表单数据、JSON数据、文件等。

响应体

  • 响应状态码(Status Code):表示服务器对请求的处理结果,如200表示成功,404表示资源未找到,500表示服务器错误等。
  • 响应头(Headers):包含各种关于响应的元数据,例如Server、Content-Type等。
  • 响应体(Body):用于返回实际的数据给客户端。可以是HTML内容、JSON数据、文件内容等。

3. HTTP请求流程

  • 客户端发起请求:客户端使用HTTP协议构建一个请求,包括请求方法(GET、POST等)、请求路径(URL)以及请求头(Headers)等信息。
  • 域名解析:如果请求的URL中使用了域名,客户端首先需要通过DNS解析获取目标服务器的IP地址。
  • 建立TCP连接:客户端使用目标服务器的IP地址和HTTP默认端口(80)或安全端口(443)建立TCP连接。
  • 发送请求:客户端通过建立的TCP连接将构建好的HTTP请求发送给服务器。这个请求包括请求行、请求头和请求体。
  • 服务器处理请求:服务器接收到客户端的HTTP请求后,根据请求行中的请求方法和路径,以及请求头中的其他信息,处理请求并准备响应。
  • 服务器发送响应:服务器构建HTTP响应,包括响应状态码、响应头和响应体等内容,然后将响应通过已建立的TCP连接发送给客户端。
  • 客户端接收响应:客户端接收服务器返回的HTTP响应,包括响应状态码、响应头和响应体等内容。
  • 关闭连接:客户端和服务器都可以选择在接收完响应后关闭TCP连接(短连接),或者保持连接以便后续交互(长连接)。
  • 解析响应:客户端解析响应内容,根据响应状态码和响应头来判断请求是否成功以及如何处理响应体的内容。
  • 显示内容:如果响应成功,客户端可以根据响应体中的内容,将数据显示在用户界面上或者进行其他处理。

4. HTTP的发展

HTTP协议在不同版本中有不同的改进和不足之处。以下是HTTP 1.0、2.0和3.0版本的一些特点、不足和展望:
HTTP 1.0:

  • 特点:
    • 首个广泛应用的HTTP版本。
    • 请求-响应模型,每个请求都需要建立一个新的TCP连接。
    • 响应不支持分块传输,导致效率低下。
  • 不足:
    • 每个请求需要建立和关闭TCP连接,造成多次连接开销。
    • 没有持久连接,浪费带宽和资源。
    • 大量小文件请求时的性能较差。

HTTP 1.1:

  • 特点:
    • 引入持久连接(Keep-Alive)机制,减少连接建立次数。
    • 支持分块传输,能够在接收到一部分内容时就开始渲染,提升用户体验。
    • 引入虚拟主机的概念,使多个网站可以共享同一IP地址。
  • 不足:
    • 多路复用能力较弱,容易产生“队头阻塞”现象。
    • 客户端只能发送一个请求,等待响应后才能发送下一个请求。

HTTP 2.0:

  • 特点:
    • 引入多路复用(Multiplexing)机制,多个请求/响应可以在一个连接上同时进行,解决队头阻塞问题。
    • 头部压缩,减少头部信息的传输大小,提高效率。
    • 服务器推送(Server Push)机制,可以在客户端请求之前主动向客户端推送资源,提升性能。
  • 不足:
    • 需要服务器和客户端同时支持HTTP 2.0,部分老旧浏览器可能不支持。

HTTP 3.0:

  • 展望:

    • 使用QUIC协议作为传输层协议,解决TCP的队头阻塞问题。
    • 支持更快的连接建立和重传机制,减少延迟。
    • 支持并发多路复用,提升性能和吞吐量。
    • 更好地适应移动设备和无线网络环境。

5. 学习感悟

在学习HTTP的过程中也有一些感悟,随着网络的发展和现实的需要,HTTP协议也在不断的发展和优化,从HTTP1.0到HTTP3.0有了很大的优化,提高了通信效率。学习的过程中,也对RPC和Websocket有了一定的认识和学习。社会的发展引出新的需求,推动着现代互联网的发展和进步。