http
Outlinks (1)
Backlinks (0)
No backlinks found
1 · http#
应用层协议(TCP上层协议);客户端请求,服务端响应;
无状态协议:每次请求/响应都是独立的,协议本身不负责保存状态,需要额外机制(比如Cookie/Token)
请求报文 = 请求行(method + URI + version)、请求头、请求体
响应报文 = 状态行(version + Status Code)、响应头、响应体
1.1 · methods#
GET, POST, PUT, PATCH, DELETE,
HEAD 确认资源有效性,获得报文首部 OPTIONS 查询对请求URI,支持的方法
请求方法有各自的语义
1.2 · status code#
2** OK 3** 重定向 4** 请求错误 5** 服务错误
1.3 · headers#
- 有请求头,描述:我是谁、我要什么、我能接受什么;
- 有响应头,描述:这是什么、这怎么处理;
- 关注消息体本身:类型、长度、编码、范围等;
- 缓存相关
- 状态相关
- 代理,真实IP相关
1.3.1 · Referer#
请求从哪个页面跳转来的
1.3.2 · Origin#
请求来源(协议 + 域名 + 端口),CORS 常用
1.3.3 · Location#
重定向地址
1.3.4 · X-Forwarded-For#
X-Forwarded-For: client, proxy1, proxy2
从左到右依次是:客户端 → 第一层代理 → 第二层代理 … 最左边是原始客户端 IP,最右边是最后一个代理 IP。
1.3.5 · X-Real-IP#
| 场景 | 表现 |
|---|---|
| 只有一层 Nginx 做反向代理 | 原始客户端 IP(≈ XFF 第一个) |
| 多层代理 / LB / API Gateway | 当前服务看到的“直连客户端”(≈ XFF 最后一个,即上一跳) |
1.3.6 · X-Forwarded-Proto#
原始协议
1.3.7 · Forwarded#
标准化版本,替代 X-Forwarded-*
Forwarded: for=1.2.3.4;proto=https;host=example.com
1.3.8 · Connection#
- keep-alive 希望复用连接
HTTP基于TCP协议,TCP协议使用”3次握手”建立连接,如果相同客户端/服务端每次发送请求都建立TCP连接,每次都会有3次握手,造成服务器资源浪费;
HTTP1.1引入持久连接(HTTP keep-alive):只要一方没有提出断开tcp连接,则一直维持tcp状态;减少重复建立/断开连的额外开销; 同时支持同一个TCP连接上,连续发多个HTTP请求(对头阻塞问题);
http2 进行了一定优化。
- close 这次响应后把连接关掉
1.3.9 · Transfer-Encoding#
- chunked 分块传输编码
发送方不必一开始就知道完整消息体长度,数据可以一块一块发出去,接收方按块读取直到结束块