http协议中各个网段含义

Informational(信息性)------"请稍等,我还没完呢"

只有协议交互用,浏览器层面基本看不到。

1. 100 Continue

场景:客户端准备在 POST/PUT 里扔几百 KB 甚至几十 MB 的表单或文件,怕一发过去就被拒,浪费流量。

流程:

① 客户端先发一个带 Expect: 100-continue 的请求头,只传请求头,不传正文。

② 服务器若愿意收,就回 100 Continue(不带头体)。

③ 客户端收到 100,才继续把大块数据发完;如果服务器直接回 4xx/5xx,客户端就中止,省掉上传流量。

日常现象:浏览器里看不到 100,它发生在后台;用 curl、Postman、OSS/MinIO 上传大文件时最常见。

注意:部分老服务器(lighttpd 1.4、早期 Resin)不认这个头,会扔 417 Expectation Failed,此时客户端要关掉 Expect。

2. 101 Switching Protocols(ws 升级)

场景:HTTP 只负责握个手,真正想"打电话"得换成 WebSocket、HTTP/2、QUIC 等"长连接"协议。

流程:

① 客户端发 Upgrade: websocket + Connection: Upgrade 等头。

② 服务器同意,回 101,并在响应头里带上同样的 Upgrade: websocket。

③ 空行结束后,双方立即改用 WebSocket 帧格式通信,后面再没 HTTP 什么事了。

日常现象:浏览器控制台 Network 标签里,第一条请求状态码是 101,后面全是 ws 帧;聊天室、在线游戏、股票推送都用它。

注意:如果代理/防火墙把 Upgrade 头剥掉,101 就不会出现,WebSocket 会直接连不上。

Success(成功)------"一切 OK,你要的东西在包里"

200 OK 常规成功

201 Created 已新建(POST 后常用)

场景:POST 上传资源、PUT 新建文件、调用 RESTful 接口"新增用户/订单/文章"成功。

特点:服务器必须在响应头里给 Location: 新资源的完整 URL,告诉客户端"东西我帮你存好了,以后就来这儿取"。

日常现象:调后端 API 返回 201 + Location,前端一般弹"新建成功",并跳转到刚创建的详情页

204 No Content 成功但无返回体(DELETE/OPTIONS 常用)

场景:服务器成功执行了删除、保存、设置操作,但没必要再回任何数据。

特点:响应头可以带更新后的元信息(ETag、Last-Modified),但实体体必须为空。

日常现象:

前端发 DELETE /api/user/123 后收到 204,页面列表直接把那条记录移除即可,无需再解析响应体。

表单保存后服务器回 204,页面不刷新,用户继续留在当前视图

Redirection(重定向)------"东西不在我这,去别处拿"

301 Moved Permanently

永久搬家。浏览器收到后会缓存这个重定向,下次访问原 URI 直接跳新地址,SEO 权重也会转移。

302 Found(原叫 Moved Temporarily)

临时搬家。下次访问还会先问原地址,适合登录跳转、推广活码等场景。

303 See Other

强制客户端用 GET 方法去 Location 拿结果,常用于 POST 表单后"转回列表页",防止刷新时重复提交。

304 Not Modified

资源内容没动,你本地缓存还能继续用。服务器只回响应头,不回包体,省流量。触发条件是客户端带的 If-Modified-Since/If-None-Match 与服务端比对一致

|-----|----------------------------|-------------------------------------|
| 码 | 英文短语 | 一句话记忆 |
| 301 | Moved Permanently | 永久搬家,搜索引擎把权重带走 |
| 302 | Found(原 Moved Temporarily) | 临时搬家,下次还来原地址问 |
| 303 | See Other | 用 GET 去另一个地址拿(POST-redirect-GET 模式) |
| 304 | Not Modified | 你缓存还有效,继续用,省流量 |
| 307 | Temporary Redirect | 302 的"严格版",禁止把 POST 变成 GET |
| 308 | Permanent Redirect | 301 的"严格版",同样禁止改方法 |

Client Error(客户端错)------"你自己搞错了"

|------------------------|----------------------|
| 码 | 一句话记忆 |
| 400 Bad Request | 语法/参数不对 |
| 401 Unauthorized | 没登录,先交凭证 |
| 403 Forbidden | 登录了也没权限 |
| 404 Not Found | 地址写错或资源被删 |
| 405 Method Not Allowed | 该接口不支持你用的 GET/POST 等 |
| 408 Request Timeout | 你发得太慢,服务器不等了 |
| 429 Too Many Requests | 调用太频繁,被限流 |

Server Error(服务端错)------"我这边挂了"

500 Internal Server Error

万能"背锅码":业务代码抛异常、配置错误、空指针、数据库连不上......服务器只能说"我内部错了",具体原因得看日志。

502 Bad Gateway

网关/反向代理(Nginx、CDN、ELB)自己工作正常,但从上游(后端、PHP-FPM、Tomcat)拿到无效或过早断开的响应,于是报 502。

503 Service Unavailable

服务器暂时不能处理,可能在维护、重启、限流、过载。响应头里通常带 Retry-After: 秒数,告诉客户端多久后再试。

504 Gateway Timeout

代理在限定时间内没等到上游回包,比 502 更"拖":连得上,但上游慢到超时。

|---------------------------|----------------|
| 码 | 一句话记忆 |
| 500 Internal Server Error | 通用"锅"码,后端代码崩了 |
| 502 Bad Gateway | 代理/网关从上游拿到无效响应 |
| 503 Service Unavailable | 服务器在维护或超载,稍后再试 |
| 504 Gateway Timeout | 代理等上游响应超时 |

上游的介绍

在技术栈里,"上游"(upstream)就是 Nginx、CDN、负载均衡器、API 网关这类"前台"背后,真正生成内容的那一组服务器。常见组合举例:

LNMP 架构

用户 → Nginx(前台) → php-fpm 进程池(上游) → 返回 HTML

Java 传统架构

用户 → Nginx → Tomcat/Jetty(上游) → 返回 JSON/HTML

微服务网关

用户 → Kong/Gateway → 订单服务 Pod、用户服务 Pod(上游) → 返回业务数据

CDN 场景

用户 → Cloudflare CDN → 源站 ECS(上游) → 回源拉取静态文件

因此,"上游"不是一个神秘新硬件,就是泛指"代理节点背后,真正处理请求的后端服务/容器/进程"。

相关推荐
张太行_39 分钟前
TCP连接长时间未进行数据交互是否会断开?如何维持?
网络·tcp/ip·智能路由器
Felven43 分钟前
基于DPDK的高性能网络方案
网络·dpdk·lwip
bedynamic1 小时前
使用BGP实现不同AS之间的通信
网络·华为ensp
Henry Zhu1231 小时前
VPP中的DPDK插件源码详解第三篇:DPDK插件的数据接收和发送
运维·服务器·网络·tcp/ip·计算机网络
ASKED_20191 小时前
不同 QPS 场景下的服务部署架构指南(实战经验总结)
http·架构
budingxiaomoli1 小时前
初始网络原理
java·运维·服务器·网络
汤愈韬1 小时前
防火墙双机热备HRP
网络协议·security·huawei
嘻哈baby1 小时前
WebRTC实时通信原理与P2P连接实战
网络协议·webrtc·p2p