HTTP 协议基础

官官方信息技术老师·11 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

HTTP 协议基础

计算机基础面试八股 · 第 1 章 计算机网络

按 空格/→ 演示下一步

问一句
1 / 11 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

HTTP 协议基础

计算机基础面试八股 · 第 1 章 计算机网络

1第 1 页 · HTTP 协议基础

请求与响应报文结构

HTTP 报文是文本协议的骨架:起始行、首部、空行、正文四段式,读懂报文就读懂了一切交互。

四段结构
起始行、首部字段、空行、正文,顺序固定不可省略
请求行
方法 + 路径 + 版本,如 GET /index.html HTTP/1.1
状态行
版本 + 状态码 + 短语,如 HTTP/1.1 200 OK
常见首部
Host 必带;Content-Type 说明正文类型;Cookie 随请求上行
2第 2 页 · 请求与响应报文结构

报文结构自测

点击作答

HTTP 报文中,首部字段与正文之间的分界是什么?

3第 3 页 · 报文结构自测

常见方法语义与幂等性

方法表达操作意图,幂等性描述重复执行的后果——两者组合就是接口设计的语法书。

读与写
GET 只读且无害;POST 提交数据,可能产生副作用
幂等方法
GET/PUT/DELETE 幂等:重放一次与多次效果相同
POST 与 PUT
POST 向集合新增成员;PUT 整体替换指定资源
4第 4 页 · 常见方法语义与幂等性

POST 与 PUT 语义对比

两个方法都会写数据,面试常考的差别在幂等性与资源定位。

POST
  • 语义:向资源集合提交新增
  • 非幂等:重复提交产生多份
  • URI 指向集合,如 /articles
PUT
  • 语义:整体替换目标资源
  • 幂等:重复执行结果不变
  • URI 指向具体资源,如 /articles/42
创建用 POST、整体更新用 PUT;幂等性是区分两者的关键词。
5第 5 页 · POST 与 PUT 语义对比

状态码分类与常见码

状态码第一位数就是答案的类别:1 信息、2 成功、3 重定向、4 客户端错、5 服务端错。

2xx 成功
200 正常返回;204 成功但无正文
3xx 重定向
301 永久搬家;302 临时跳转;304 协商缓存命中
4xx 客户端
400 参数错;401 未登录;403 禁止;404 不存在
5xx 服务端
500 内部异常;502 网关够不着上游;504 上游超时
6第 6 页 · 状态码分类与常见码

HTTP/1.1 长连接与队头阻

1.1 默认长连接省去反复握手,但同一连接上的请求必须排队——队头阻塞由此而来。

长连接
Connection: keep-alive 默认开启,一条连接跑多次请求
管线化遇冷
pipelining 要求响应按序返回,实践几乎无人敢开
队头阻塞
前一响应未完成,后续请求全部干等
折中手段
浏览器并开约 6 条连接 + 域名分片缓解
食堂单一窗口对应 →HTTP/1.1 排队

前一个人没打好饭,后面全得干等——这就是队头阻塞

7第 7 页 · HTTP/1.1 长连接与队头阻

HTTP/2 多路复用与头部压

2 把报文拆成二进制帧,多条流在一条连接上并行交错,HTTP 层的排队从此消失。

二进制分帧
报文切帧,帧带流编号,接收端按流重组
多路复用
多流并行互不等待,请求再多也不用排队
HPACK 压缩
首部建索引表,重复头只传编号,体积大降
残留问题
TCP 层丢包仍会阻塞所有流,解药在 HTTP/3
8第 8 页 · HTTP/2 多路复用与头部压

HTTP/3 与 QUIC 概览

QUIC 把可靠传输搬进 UDP 上的用户态,握手即加密,换网连接不断线。

基于 UDP
绕开内核 TCP 实现,协议迭代升级全在应用层
0-RTT 复用
复用此前会话参数,首个往返即可携带请求数据
内建 TLS 1.3
加密与传输一体化,握手从 1-RTT 起步
连接迁移
用连接 ID 标识连接,切换网络不掉线
9第 9 页 · HTTP/3 与 QUIC 概览

本节要点

  • ✓报文四段:起始行、首部、空行、正文
  • ✓GET/PUT/DELETE 幂等,POST 不幂等
  • ✓状态码首位定类:2 成功、3 跳转、4 客户端、5 服务端
  • ✓1.1 队头阻塞 → 2 分帧并行 → 3 QUIC 上 UDP
延伸主题:用 DevTools 抓一次完整报文了解 103 Early Hints
10第 10 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1GET 是幂等的,为什么还说「GET 请求不要有副作用」?

参考答案幂等只约束重复执行的最终效果,不承诺无副作用;把状态修改放进 GET,会被预取、爬虫与缓存放大成事故,所以约定 GET 只读。

2HTTP/2 已解决队头阻塞,为什么说 TCP 层还有一份?

参考答案2 的多路复用共享同一条 TCP 连接,任一报文段丢失,内核必须等重传补齐序号,所有流一起卡住;HTTP/3 用 QUIC 按流独立重传才根治。

3301 与 302 浏览器行为看起来一样,为什么不能互换?

参考答案301 表示资源永久迁移,浏览器与搜索引擎会缓存并更新索引;302 只是临时跳转,旧地址仍然有效。语义不同,误用会伤害缓存与收录。

11第 11 页 · 课后思考