1xx 是什么
1xx 是信息性响应,表示「请求已收到、处理还在进行中」,它不是最终结果:除 101 交换协议外,客户端应该继续等待后续的最终响应。同一请求过程中 1xx 可以出现任意次,因此代理与网关必须能正确转发或忽略它们——这也是老版本中间设备容易出问题的地方。
基本信息
| 范围 | 100-199 |
|---|---|
| 语义 | 临时性中间响应,不是最终结果 |
| 规范 | RFC 9110 §15.2 |
| 成员 | 100 Continue、101 Switching Protocols、103 Early Hints |
| 已废弃 | 102 Processing(原用于 WebDAV,现已不用) |
| 兼容性 | HTTP/1.0 客户端与老代理对 1xx 处理不完善 |
典型使用场景
- 大文件上传前用 100 Continue 确认服务端愿意接收,避免白传几百兆
- WebSocket 升级:101 表示协议切换成功,之后的连接不再按 HTTP 解析
- 用 103 Early Hints 提前下发 Link 预加载提示,让浏览器并行准备资源
- 排查上传超时与代理行为:抓包看 100 是否被中间设备吞掉
- 网关与反向代理的兼容性测试:确认 1xx 能透传到上游
观察 1xx 中间响应
观察 1xx 中间响应
# -v 会打印所有中间响应,grep 出 HTTP 状态行
curl -v --expect100-timeout 2 -d @bigfile.bin https://upload.example.com/ 2>&1 | grep -E '^< HTTP'
# 只发头不发体,观察服务端是否回 100 Continue
curl -v -H 'Expect: 100-continue' -H 'Content-Length: 1048576' -X POST https://upload.example.com/ 2>&1 | head -20
# 观察 WebSocket 升级:101 Switching Protocols
tcpdump -nn -A 'tcp port 80' -c 20 | head -401xx 成员一览
| 状态码 | 名称 | 典型场景 |
|---|---|---|
| 100 | Continue | Expect: 100-continue 的上传前预检 |
| 101 | Switching Protocols | WebSocket 等协议升级 |
| 102 | Processing | 原用于 WebDAV 长操作防超时,现已废弃 |
| 103 | Early Hints | 提前下发 Link 头,引导客户端预加载 |
1xx 响应不能作为一次请求的结束:客户端收到 100 后只是把请求体发出去,真正结果仍在后面的 2xx/4xx/5xx 里。写 HTTP 客户端或代理时,遇到 1xx 必须继续读,不能当成最终响应返回给上层。
部分老版本反向代理与负载均衡会缓存或丢弃 1xx,导致上游等不到 100 而超时、或客户端收不到 103 的预加载提示。升级中间设备后,这类问题常表现为「某个接口偶发上传失败」。
协议升级到 101 之后,这条连接就不再按 HTTP 报文解析:WebSocket 有自己的帧格式,网关必须支持连接升级与长连接保持,否则会被按空闲超时切断,表现为「连上以后几十秒必然断开」。