Http Protocol
HTTP is an application-layer protocol for transmitting hypermedia documents, such as HTML. It was designed for communication between web browsers and web servers, but it can also be used for other purposes, such as machine-to-machine communication, programmatic access to APIs, and more.
HTTP 特点
- 基于请求/响应模型: 所有的通信都是由客户端发起请求,服务器对请求进行响应
- 无状态 Stateless: 服务器不会保存客户端的状态信息,每次请求都独立
- 无连接 Connectionless: 客户端与服务器在完成一次请求-响应后,链接就会断开。但
HTTP/1.1引入了Keep-Alive,允许在同一连接中发送多个请求和响应,减少建立连接的开销
HTTP
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
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 头部指定的类型而定
HTTP
{ "username": "example", "password": "password123"}HTTP
username=example&password=password123HTTP Response Message
Status Line
消息的第一行,包含 HTTP 版本、状态码和状态文本,例如 HTTP/1.1 200 OK
HTTP Status Code

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

