HTTP 协议与 Web 服务排障
HTTP 协议与 Web 服务排障
浏览器报个 502、504,运维的第一反应应该不是”重启”,而是能准确说出这个状态码代表哪一层出了问题。这篇把 HTTP 协议的生产用法整理成一套排障体系。
一、HTTP 是什么
HTTP(超文本传输协议)把超文本文档从 Web 服务器传输到浏览器,应用层协议,基于 TCP 80/443。
URL 组成:协议://主机:端口/路径。三个特点:
- 请求/响应模型:客户端发请求,服务端回响应;
- 无状态:HTTP 本身不记录用户状态(靠 Cookie/Session 补);
- 基于 TCP:先三次握手,再传 HTTP 报文。
一条命令看全流程(curl -v 是 Web 排障的第一工具):
1 | curl -v http://www.example.com/ |
二、请求方法与响应结构
GET vs POST:GET 参数在 URL 里(?a=1&b=2),POST 参数在请求体里。POST 更安全——参数不留在日志和地址栏。
响应报文:状态行(HTTP/1.1 200 OK)+ 头部 + 响应体。
三、状态码:生产高频场景(面试必问)
| 状态码 | 含义 | 排障方向 |
|---|---|---|
| 502 Bad Gateway | 反向代理连不上后端(Tomcat 挂了/端口不通/连接数满) | ss -lnt 看后端端口 → tail 后端日志 → curl 后端健康检查 |
| 504 Gateway Timeout | 连上了后端但响应超时(后端慢/排队) | 后端日志、慢查询、线程池满 |
| 503 Service Unavailable | 服务暂时不可用(重启/维护/限流) | 看部署状态、限流配置 |
| 403 Forbidden | 无权限(nginx deny/目录权限) | nginx 配置、文件权限 |
| 404 Not Found | 资源不存在 | 路径写错、静态资源没部署 |
1 | curl -s -o /dev/null -w "%{http_code}" http://localhost/ # 快速看状态码 |
四、关键头部字段(运维用途)
| 头部 | 运维用途 |
|---|---|
| Server | curl -I 识别 Web 服务版本(安全审计/指纹) |
| Referer | 防盗链判断——图片 403 先看 Referer |
| Host | 决定 Nginx 走哪个 server 块——多站点访问错页面先查 Host |
| User-Agent | 区分爬虫/正常用户(封爬虫按 UA) |
五、重定向 301/302/304
1 | 301 永久重定向:域名换了 / HTTP 跳 HTTPS(SEO 权重转移) |
Nginx 配置示例:
1 | server { |
六、PV / UV / IP(站长口径)
1 | PV(Page View):页面浏览量,一个人点 2 次算 2 个 PV |
经典计算题:公司大厦 100 人、每人 2 台设备、走同一个 NAT 出口、每人点 2 次 → PV=400、UV=200、IP=1。PV ≥ UV ≥ IP 永远成立;IP 在 NAT 场景只是近似值。
七、Web 全链路排障(面试讲故障故事用)
用户报”网站打不开”,从外层到内层逐层看:
1 | 用户浏览器 → DNS 解析 → 防火墙/安全组 → 负载均衡健康检查 → Nginx 日志 |
入门手段永远是一句话:先 curl 本地确认服务在,再一层层往外查。用户反馈”打开慢”时用浏览器 F12 → Network → Timing 看各段耗时,定位是 DNS 慢、TCP 慢还是 TTFB(服务端处理慢)——比瞎猜快得多。
HTTP 这一层是 Web 排障的”界面层”:状态码告诉你错在哪一段,头部告诉你细节,curl 帮你复现全过程。配合前面的 TCP 和 DNS 知识,一条链路就完整了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuminDream's Blogs!


