详解 HTTP
HTTP ,全称为 HyperText Transfer Protocol (超文本传输协议),是基于请求-响应模型的无状态协议。
它定义了客户端和服务端之间通信的规则,被广泛应用于浏览网页,接口调用,数据传输和下载。
通信过程如下:
- 客户端发起请求。
- 服务器接收请求。
- 服务器处理请求后返回响应。
- 客户端接收响应。
请求和响应
以下是一个常见的请求体和对应的响应体。
POST /api/user HTTP/2
Host: api.example.com
User-Agent: Chrome/137.0.0.0
Accept: */*
Content-Type: application/json
Content-Length: 100
Authorization: Bearer xxx.xxx.xxx
{
"username": "xxx",
"password": "xxxxxxxx",
"channel": 23
}
HTTP/2 200 OK
Content-Type: application/json
Content-Length: 123
{
"status": "success",
"message": "User authenticated",
"user": {
"id": 1024,
"username": "xxx",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
请求体通常由三个部分组成:
-
请求行,用来标注请求方法,路径,协议版本。
POST /api/user HTTP/2
-
请求头,标注这个请求携带的元数据。如请求主机,认证 token 等。
Host: api.example.com User-Agent: Chrome/137.0.0.0 Accept: */* Content-Type: application/json Content-Length: 100 Authorization: Bearer xxx.xxx.xxx
-
请求体,为这个请求携带参数,需要和请求体之间间隔一行空行。
{ "username": "xxx", "password": "xxxxxxxx", "channel": 23 }
响应体则和请求体类似,分为三个部分组成:
-
状态行,标注请求响应状态。
HTTP/2 200 OK
-
响应头,标注响应携带的元数据,如返回 json 格式,内容长度 123。
Content-Type: application/json Content-Length: 123
-
响应体,为这个响应添加数据。和请求体一样,需要空一行。
{ "status": "success", "message": "User authenticated", "user": { "id": 1024, "username": "xxx", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } }
HTTP 请求
HTTP 是客户端与服务器之间进行通信的协议,它定义了请求的方式以及响应的格式。
让客户端通过不同的请求方法告知服务器希望执行的操作。常见的 HTTP 请求方法如下:
方法 | 说明 |
---|---|
GET | 获取资源(无请求体) |
POST | 提交数据(有请求体) |
PUT | 更新整个资源 |
PATCH | 局部更新资源 |
DELETE | 删除资源 |
服务器在处理完请求后,会返回一个状态码用于说明本次请求的处理结果。
状态码被分类如下:
- 1xx:信息类(如 100 Continue)
- 2xx:成功类
- 3xx:重定向类(如 301、302、304)
- 4xx:客户端错误
- 5xx:服务器错误
常见的状态码如下:
状态码 | 含义 |
---|---|
200 | OK,请求成功 |
201 | Created,资源已创建 |
400 | Bad Request,请求参数错误 |
401 | Unauthorized,未授权 |
403 | Forbidden,无权限访问 |
404 | Not Found,资源不存在 |
500 | Internal Server Error |
无状态
HTTP 是一种无状态协议,这意味着每次请求都是独立的,服务器不会自动保留先前请求的上下文。
为了在实际应用中维持用户登录状态或操作连续性,必须通过额外机制来标识用户身份和会话状态。常见的几种方式如下:
-
Cookie:由服务器写入客户端浏览器,客户端在后续请求中会自动携带该 Cookie,服务器可据此识别用户。
-
Session:服务器在本地维护的会话状态,通常依赖于客户端提供的 Session ID(通常通过 Cookie 传递)来关联。
-
Token(令牌):服务器在用户认证成功后颁发的认证信息,客户端需要在每次请求中主动携带该令牌(通常通过 Authorization 头),以访问受保护的资源。
这些机制共同弥补了 HTTP 协议无状态的天然限制,使得用户认证、会话管理等功能得以实现。
HTTP 协议版本
HTTP 协议经历了多个版本的演进:
版本 | 特点说明 |
---|---|
HTTP/1.1 | 默认持久连接,支持管道化请求,但仍是串行传输 |
HTTP/2 | 二进制格式,多路复用,首部压缩,显著提升性能 |
HTTP/3 | 基于 QUIC 协议,进一步提升连接速度与可靠性 |
目前主流浏览器和服务端已广泛支持 HTTP/2 和 HTTP/3。
安全性相关
-
HTTPS:通过 TLS/SSL 加密通信,防止中间人攻击与数据泄露。但是需要注意,因为是加密通信,需要进行解密,因此 HTTPS 的性能会相较于 HTTP 稍低。不过相较于带来的安全性,这些开销是可以接受的。
-
CORS(跨域资源共享):浏览器的安全策略限制跨域请求,服务端需设置响应头如:
Access-Control-Allow-Origin: *
-
CSRF / XSS 防护:常见 Web 安全风险,可通过令牌、白名单、编码等手段防范。