Http Protocol
HTTP 是一种应用层协议,用于传输Hypermedia Documents,例如 HTML。它最初是为Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他用途,如机器间通信、API访问等。本文对其请求报文、响应报文以及版本进行介绍
HTTP 特点
- 基于请求/响应模型: 所有的通信都是由客户端发起请求,服务器对请求进行响应
- 无状态 Stateless: 服务器不会保存客户端的状态信息,每次请求都独立
- 无连接 Connectionless: 客户端与服务器在完成一次请求-响应后,链接就会断开。但
HTTP/1.1引入了Keep-Alive,允许在同一连接中发送多个请求和响应,减少建立连接的开销
Connection: keep-aliveKeep-Alive: timeout=30, max=100HTTP Message
HTTP 消息分为请求消息和响应消息,两者结构类似,如下图所示,都可以分为三部分:起始行 (Start Line)、头部 (Headers) 和可选的消息体 (Body)。
HTTP Request Message
Request Line
消息的第一行,包含
- Method:
GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH - Request Target:
/resource/user?id=10 - Version:
HTTP/1.1
Method
| 方法 | 是否幂等 | 是否有 body | 常见用途 |
|---|---|---|---|
| GET | ✅ | ❌ | 查询 |
| POST | ❌ | ✅ | 创建 |
| PUT | ✅ | ✅ | 全量更新 |
| PATCH | ⚠️ | ✅ | 部分更新 |
| DELETE | ✅ | ❌/✅ | 删除 |
| HEAD | ✅ | ❌ | 查元信息 |
| OPTIONS | ✅ | ❌ | 探测能力 |
Request Headers
请求携带的元数据,每个 Header 占一行,用冒号分隔键和值,常见的 Header 有:
- Host: 请求的目标,如
example.com,a.com:8080,localhost:4000;Host 拼接 Request Target 即可确认请求资源的位置,例如example.com/index.html
- User-Agent: 客户端软件信息,如浏览器类型和版本
- Referer: 来源页面的 URL
- Content-Type: 请求体的数据类型,如
application/json - Content-Length: 请求体的长度(字节数)
- Authorization: 认证信息,如
Bearer token,Basic base64encodedcredentials - Cookie: 客户端存储的 Cookie 数据
Request Body
可选部分,包含客户端发送给服务器的数据,格式根据 Content-Type 头部指定的类型而定
{ "username": "example", "password": "password123"}username=example&password=password123HTTP Response Message
Status Line
消息的第一行,包含 HTTP 版本、状态码和状态文本,例如 HTTP/1.1 200 OK
HTTP Status Code
srcset="https://assets.vluv.space/http_protocol_status_code.webp?w=500 500w, https://assets.vluv.space/http_protocol_status_code.webp?w=1200 1200w, https://assets.vluv.space/http_protocol_status_code.webp?w=2000 2000w, https://assets.vluv.space/http_protocol_status_code.webp?w=3000 3000w"
loading="lazy" decoding="async"
style="width:100%; object-fit:cover; transition: opacity 0.3s; opacity:0;"
onload="this.style.opacity=1; this.parentElement.style.backgroundImage='none';"
alt="http_protocol_status_code.webp"></div>
See more datails HTTP 常见状态码总结(应用层) | JavaGuide
Response Headers
提供响应的元数据,curl 可以指定 -I 参数仅查看响应头部, 例如 curl -I vluv.space
常见的 Header 有:
- Server: 服务器软件信息,如
Apache/2.4.41 (Ubuntu)
- Cache-Control[1]: 告诉客户端如何缓存响应,例如
public,privateno-cache,max-age=3600 - Etag: 资源的唯一标识符,用于缓存验证;服务器在响应中返回 ETag,客户端在后续请求中通过
If-None-Match头部携带该 ETag,服务器根据 ETag 判断资源是否被修改,如果没修改可以不发送响应体,并把状态码设为304 Not Modified,从而节省带宽
- Content-Type & Content-Length: 响应体的数据类型和长度
Response Body
可选部分,包含服务器返回的实际数据;格式根据 Content-Type 头部指定的类型而定
Http Protocol



