# HTTP优缺点
30 秒速记
- 优点:简单、灵活、易扩展,软硬件生态成熟(浏览器、
Nginx、CDN全支持) - 无状态是双刃剑:服务器不存会话 → 加机器就能扛量;但登录这类连续状态要靠
Cookie/Token补 - 明文:抓包一眼看懂,方便调试,也方便被窃听
- 不安全:不验证对方身份、不防篡改 → 公网一律上
HTTPS - 性能:
HTTP/1.1有队头阻塞、头部冗余,HTTP/2多路复用 + 头部压缩,HTTP/3换QUIC解决TCP层的阻塞
HTTP 的长处是简单灵活、生态成熟,短处集中在安全和性能上。 无状态让服务端特别好扩容,请求打到哪台机器都能处理,代价是登录态要用 Cookie、Token 或者集中存储的 Session 自己补。明文传输对调试很友好,Charles 一抓全看得懂,可在公共网络上就等于裸奔:谁都能看、能改,也没法确认对面真是你要连的服务器,这三件事都要靠 HTTPS 解决。性能问题要分版本说,HTTP/1.1 一条连接同一时间只能处理一个请求,后面的得排队,HTTP/2、HTTP/3 主要就是来解决这个的。
HTTP最大的优点是简单、灵活和易于扩展;HTTP拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;HTTP是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用Cookie技术来实现“有状态”;HTTP是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;HTTP是不安全的,无法验证通信双方的身份,也不能判断报文是否被窜改;HTTP的性能不算差,但不完全适应现在的互联网,还有很大的提升空间

原理拆解: HTTP 规定报文语义和通信规则,不强制业务如何保存状态。请求通常携带方法、目标、首部和可选正文,响应返回状态码、首部和正文,因此客户端、代理、缓存与服务器可以独立演进。无状态表示服务器不必依赖前一次请求才能解释当前请求;它降低了节点替换和负载均衡的成本,但登录态、购物车等连续上下文仍需由 Cookie、令牌或服务端会话补齐。
最小验证: 输入以下两组报文,验证基础 HTTP 的请求相互独立,身份连续性来自显式携带的状态,而不是协议自动记忆。
GET /profile HTTP/1.1
Host: example.com
Connection: close
HTTP/1.1 401 Unauthorized
Set-Cookie: sid=a8f31; Path=/; HttpOnly
Content-Length: 0
GET /profile HTTP/1.1
Host: example.com
Cookie: sid=a8f31
Connection: close
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 16
{"name":"Alice"}
关键行是第二次请求中的 Cookie:缺少它时,同一路径仍可能返回 401;携带它后,服务器才有依据关联会话。报文可读也说明明文链路容易调试,但若直接经过不可信网络,路径、首部和正文都可能被观察或修改。
边界与排查: “无状态”不等于服务器不能保存数据,而是单个请求应包含完成处理所需的信息;粘性会话只是部署策略,并非 HTTP 的必然要求。性能也不能脱离版本讨论:HTTP/1.1 常受连接和队头等待影响,后续版本通过多路复用、头部压缩等机制改善传输。工程验证可在浏览器 Network 面板或抓包工具中核对协议版本、连接复用、缓存首部和耗时;涉及公网敏感数据时应检查是否使用 HTTPS,不能把“看不懂正文”误当成身份认证或完整性保护。
面试官追问
追问 1服务扩到 20 台后,有人说 HTTP 无状态所以必须把 Session 全删掉,对吗?
不对。无状态说的是协议不替你记会话,不是禁止服务端存。Session 照样能用,只是要放到 Redis 这类共享存储里,别存在单台机器内存,否则请求换一台机器就丢登录。
追问 2第一次请求返回 Set-Cookie: sid=...,第二次还是 401,先查什么?
先看第二次请求头里有没有真的带上 Cookie。常见原因是跨域请求没开 credentials: 'include',或者 Cookie 设置了 Secure 却在 HTTP 下访问、SameSite 拦掉了。服务端有会话没用,请求不带上就对不上号。
追问 3测试说正文不放密码,公网继续用 HTTP 方便抓包,可以吗?
不行。明文链路上路径、Cookie、Token 全都看得见,运营商还能往页面里插广告脚本。调试问题用 Charles、Whistle 装证书照样能看 HTTPS,不需要为了抓包牺牲线上安全。
追问 4上了 HTTPS 抓包看不到正文了,是不是登录鉴权也就安全了?
两回事。HTTPS 解决的是传输过程不被偷看、不被篡改、对端身份可信,管不了你接口有没有越权。用户改个 userId 就能看别人数据,HTTPS 照样拦不住,鉴权得服务端自己做。
追问 5有人说 HTTP 太慢要整体淘汰,你怎么看?
先问是哪个版本慢。HTTP/1.1 的队头阻塞、每个请求重复发一大堆头确实是问题,但 HTTP/2 一条连接并发多个请求、压缩头部,HTTP/3 换成 QUIC 连 TCP 层的阻塞也解决了。多数站点开个 HTTP/2 就能缓解,谈不上淘汰。
