HTTP框架学习总结 | 青训营
HTTP协议简介
HTTP(Hypertext Transfer Protocol)是一种用于在计算机之间传输超文本的协议。它是构建在TCP/IP协议之上的,用于在客户端(通常是Web浏览器)和服务器之间传递信息。HTTP是现代互联网的基础,它使得我们可以在Web浏览器中请求和接收网页、图像、视频、音频和其他资源。
-
客户端-服务器模型 HTTP使用客户端-服务器模型,其中客户端发送请求并等待服务器响应。客户端通常是Web浏览器,而服务器则是存储资源的主机。
-
请求(Request) 客户端通过发送HTTP请求来请求特定资源。请求包含请求方法(例如GET、POST、PUT、DELETE等)、URL(Uniform Resource Locator,即资源的地址)、HTTP版本、请求头部(包含附加信息,如User-Agent、Accept等)以及可选的请求体(例如在POST请求中发送的数据)。
-
响应(Response) 服务器在接收到请求后会发送HTTP响应回客户端。响应包含HTTP版本、状态码(表示请求是否成功,例如200表示成功,404表示未找到,500表示服务器错误等)、响应头部(包含服务器信息、内容类型、内容长度等)以及响应体(实际的资源内容,如网页内容、图像数据等)。
协议内容
HTTP协议包含请求行/状态行、请求头/相应头和请求体/相应体。
-
方法名 HTTP定义了一些常见的请求方法,最常见的是GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。
-
URL 统一资源定位符用于标识互联网上的资源。它包含协议、主机名、端口、路径和查询参数等信息。
-
状态码 HTTP状态码用于指示请求的处理情况。一些常见的状态码包括:
- 200 OK:请求成功。
- 404 Not Found:未找到请求的资源。
- 500 Internal Server Error:服务器内部错误。
HTTP版本之间的区别
HTTP/1.0
- 首个主要版本的HTTP。
- 每个HTTP请求都会建立一个新的TCP连接,然后关闭连接,导致高延迟。
- 不支持持久连接,每个请求都需要重新建立连接。
- 不支持管道化(Pipeline),即一个连接上同时发送多个请求,响应的顺序可能与请求不一致。
- 无法在一个连接上同时处理多个请求和响应。
HTTP/1.1
- 引入了持久连接(Keep-Alive),允许在同一个连接上发送多个请求和响应,减少连接建立和关闭的开销,提高性能。
- 引入了管道化(Pipeline),允许在一个连接上同时发送多个请求,但容易产生队头阻塞问题。
- 支持虚拟主机(Virtual Hosting),允许在同一个IP地址上托管多个域名。
- 引入了更多的请求方法,例如OPTIONS、TRACE等。
- 支持更多的响应状态码,如206 Partial Content。
HTTP/2
- 引入了二进制分帧层,将HTTP消息分成小的二进制帧,在一个连接上可以并行发送和接收多个帧,解决了队头阻塞问题,提高了性能。
- 使用了头部压缩(Header Compression),减少了传输的头部数据量,节省带宽。
- 支持服务器推送(Server Push),允许服务器在客户端请求之前主动发送资源。
- 引入了优先级和依赖性机制,允许客户端指定请求的优先级和依赖关系,优化资源加载顺序。
- 使用了加密,尽管它并不是HTTP/2的必需部分,但通常与TLS一起使用,称为HTTP/2 over TLS(即HTTPS)。
HTTP/3
- 基于QUIC协议,不再使用TCP作为传输层协议,而是使用QUIC,这可以减少连接建立时间,并提供更好的流量控制和错误恢复机制。
- 通过多路复用和连接共享,允许在一个连接上同时处理多个请求和响应,更进一步地减少延迟。
- 支持零RTT连接建立,进一步减少连接建立时间。
- 强调安全性,通常与TLS一起使用,称为HTTP/3 over TLS。
这些版本之间的改进都旨在提高HTTP协议的性能、效率和安全性,以适应不断增长的互联网使用需求。
学习建议
随着HTTP协议不断演进,了解最新的版本和变化,跟踪行业动态,保持学习和更新知识。