【直播开发】HTTP 协议的基本概念和工作原理

185 阅读5分钟

前言

在学习 WebSocket 之前,我们还需要了解 HTTP 协议的一些基本概念和工作原理。

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,它是在 TCP/IP 协议族的基础上进行了扩展。HTTP 协议定义了客户端和服务器之间通信的格式和方式,它由请求和响应构成。

请求与响应

HTTP 请求

每个 HTTP 请求都由一个请求方法、请求 URI 和协议版本组成,请求头中可以包含多个键值对,请求体中可以包含发送的数据。下面是一个 HTTP 请求的示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1

上述代码中,GET 表示请求方法/index.html 表示请求的 URIHTTP/1.1 表示协议版本。请求头中包含了多个键值对,比如 Host 表示服务器的域名,User-Agent 表示客户端的类型,Accept 表示客户端支持的媒体类型等。

常见的 HTTP 请求方法

下面是常见的 HTTP 请求方法和它们的作用:

请求方法作用
GET获取资源,可以缓存
POST提交数据,对服务器状态进行改变,不可以缓存
PUT提交数据,对服务器状态进行改变,可以幂等
DELETE删除资源,对服务器状态进行改变,可以幂等
HEAD获取资源的元信息,与 GET 类似,但不返回响应体
OPTIONS获取资源支持的请求方法、响应格式等信息
CONNECT建立与资源的双向通信,主要用于 HTTPS 协议
TRACE回显服务器接收到的请求信息,主要用于调试
PATCH提交部分数据,对服务器状态进行改变,不可以缓存,不同于 PUT

HTTP 响应

每个 HTTP 响应都由一个状态码、原因短语和协议版本组成,响应头中可以包含多个键值对,响应体中可以包含返回的数据。下面是一个 HTTP 响应的示例:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1147

<!DOCTYPE html>
<html>
<head>
	<title>Example Website</title>
</head>
<body>
	<h1>Welcome to Example Website</h1>
	<p>This is an example website.</p>
</body>
</html>

上述代码中,HTTP/1.1 表示协议版本200 表示状态码OK 表示原因短语。响应头中包含了多个键值对,比如 Content-Type 表示返回的媒体类型,Content-Length 表示返回的数据长度等。响应体中包含了返回的数据,比如 HTML 代码、图片、视频等。

HTTP 协议的工作原理

HTTP 协议采用请求/响应模式,它的工作流程可以简单地描述为:

  1. 客户端向服务器发送 HTTP 请求。

  2. 服务器接收请求并处理。

  3. 服务器向客户端发送 HTTP 响应。

  4. 客户端接收 HTTP 响应并处理。

客户端和服务器之间通过 TCP/IP 协议进行通信,客户端向服务器发送一个 HTTP 请求,请求包括请求行、请求头、请求体等部分服务器接收到请求后,会根据请求的 URI 和请求方法来决定如何处理请求。服务器可以根据请求的 URI 查找对应的资源,比如 HTML 文件、图片、视频等,也可以根据请求方法执行相应的操作,比如添加、删除、更新数据等。在处理请求的过程中,服务器可以生成响应。

服务器生成 HTTP 响应,响应包括状态码、原因短语和协议版本,响应头中可以包含多个键值对,响应体中可以包含返回的数据。客户端接收到 HTTP 响应后,会根据响应的状态码来判断请求是否成功。状态码的第一位数字表示响应的类型:

状态码描述例子
1xx表示信息响应100 Continue:服务器已经接收到请求头,并且客户端应该继续发送请求体,常见于 POST 请求
2xx表示成功响应200 OK:请求成功,服务器已经成功处理了请求,常见于 GET 和 POST 请求。
3xx表示重定向响应302 Found:请求的资源被临时转移,常见于网页重定向。
4xx表示客户端错误响应404 Not Found:请求的资源不存在,常见于访问不存在的网页或文件。
5xx表示服务器错误响应500 Internal Server Error:服务器内部错误,常见于服务器故障或代码错误。

客户端可以根据响应头中的信息来处理响应,比如根据 Content-Type 来解析响应体中的数据。最后,客户端可以根据响应的数据来更新界面或执行相应的操作。

总结

HTTP 协议是 Web 应用程序中最重要的协议之一,它定义了客户端和服务器之间通信的格式和方式。本文介绍了 HTTP 请求和响应的格式、请求方法、状态码等内容,同时讲解了 HTTP 协议的工作原理。理解 HTTP 协议的基本概念和工作原理对于后续学习 WebSocket 等其他网络协议也有很大的帮助。