HTTP 协议学习笔记
梳理 HTTP 请求方法语义、状态码分类与报文结构,理解无状态协议的工作机制。
一、HTTP 协议概述
HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 通信的基础协议,基于客户端-服务端模型工作。客户端发起请求,服务端返回响应。HTTP 是无状态协议——服务端默认不保留客户端的会话状态,每次请求相互独立。
当前主流版本为 HTTP/1.1(持久连接、管道化)与 HTTP/2(多路复用、头部压缩)。HTTP/3 基于 QUIC 协议,正在逐步普及。
二、请求方法
HTTP 定义了一组请求方法(也称「动词」),表示对资源的不同操作意图。
| 方法 | 语义 | 是否幂等 | 是否安全 |
|---|---|---|---|
GET | 获取资源 | 是 | 是 |
POST | 提交数据 / 创建资源 | 否 | 否 |
PUT | 整体更新 / 替换资源 | 是 | 否 |
PATCH | 部分更新资源 | 否 | 否 |
DELETE | 删除资源 | 是 | 否 |
HEAD | 只取响应头(不含正文) | 是 | 是 |
OPTIONS | 查询服务器支持的通信选项 | 是 | 是 |
幂等性:同一请求执行一次与执行多次,对资源状态产生的影响相同。
安全性:方法不修改服务器资源状态(仅查询类方法具备)。
三、状态码
HTTP 状态码用三位数字表示响应结果,按首位分为五大类。
| 分类 | 含义 | 典型状态码 |
|---|---|---|
| 1xx | 信息性(已收到,继续处理) | 100 Continue |
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301 Moved Permanently、302 Found、304 Not Modified |
| 4xx | 客户端错误 | 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found |
| 5xx | 服务端错误 | 500 Internal Server Error、502 Bad Gateway、503 Service Unavailable |
高频状态码速记
200— 请求成功,响应体包含资源内容。301— 永久重定向,浏览器与搜索引擎会缓存新地址。302— 临时重定向,不缓存。304— 资源未修改,客户端使用本地缓存(配合ETag/If-None-Match)。401— 未认证,需要登录凭证(WWW-Authenticate头引导)。403— 已认证但无权限访问该资源。404— 资源不存在。500— 服务器内部错误,多为程序异常。502— 网关错误,上游服务返回无效响应。503— 服务不可用,常见于过载或维护中。
四、报文结构
HTTP 报文为纯文本格式,分为请求报文与响应报文,结构相似:起始行 + 头部 + 空行 + 可选正文。
请求报文示例
GET /notes/http-protocol.html HTTP/1.1
Host: hermesmari.top
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: zh-CN
Connection: keep-alive
结构拆解:
- 请求行:
方法 路径 协议版本,如GET /notes/http-protocol.html HTTP/1.1。 - 请求头:键值对,每行一个,描述客户端环境与请求元信息。
- 空行:标识头部结束。
- 请求正文:GET 通常无,POST / PUT 携带提交数据。
响应报文示例
HTTP/1.1 200 OK
Server: nginx/1.24.0
Content-Type: text/html; charset=UTF-8
Content-Length: 4096
Cache-Control: public, max-age=3600
<!DOCTYPE html>
<html>...</html>
结构拆解:
- 状态行:
协议版本 状态码 状态短语,如HTTP/1.1 200 OK。 - 响应头:描述服务端信息与返回内容属性。
- 空行:标识头部结束。
- 响应正文:实际返回的数据(HTML、JSON、图片等)。
五、常用请求头
| 请求头 | 作用 |
|---|---|
Host | 目标主机名(HTTP/1.1 必填,支持虚拟主机) |
User-Agent | 客户端标识 |
Accept | 可接受的响应内容类型 |
Content-Type | 请求正文的 MIME 类型 |
Authorization | 认证凭证(Bearer Token / Basic 等) |
Cookie | 携带的 Cookie 数据 |
If-None-Match | 配合 ETag 做条件请求 |
六、常用响应头
| 响应头 | 作用 |
|---|---|
Content-Type | 响应正文的 MIME 类型与字符集 |
Content-Length | 响应正文字节数 |
Cache-Control | 缓存策略 |
ETag | 资源版本标识,用于条件请求 |
Location | 重定向目标地址(3xx / 201) |
Set-Cookie | 下发 Cookie 到客户端 |
七、小结
- HTTP 是无状态的客户端-服务端协议,基于请求-响应模型工作。
- 请求方法表达操作意图,
GET/POST最常用,幂等性是区分语义的关键。 - 状态码按首位分类,2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。
- 报文结构固定:起始行 + 头部 + 空行 + 正文,纯文本可读。
上一篇:← Linux 常用命令笔记