前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
  • HTTP

    • 基础篇

      • HTTP的前世今生
      • HTTP是什么
      • HTTP世界全览
      • HTTP分层
      • 键入网址到回车发生什么
      • HTTP报文是什么样子的
      • 理解请求方法
      • URI
      • 响应状态码
      • HTTP有哪些特点
      • HTTP优缺点
      • HTTP的实体数据
      • HTTP传输大文件
      • HTTP的连接管理
      • HTTP的重定向
      • HTTP的Cookie机制
      • HTTP的缓存控制
      • HTTP的代理服务
      • HTTP的缓存代理
    • 高级篇

    • 扩展篇

  • 浏览器相关

  • 计算机基础

# HTTP的前世今生

30 秒速记

  • HTTP/0.9(1991):只有 GET,只能拿 HTML,没有头部和状态码
  • HTTP/1.0(1996,RFC 1945):加了头部、状态码、Content-Type,能传图片了,但只是信息性文档不是正式标准
  • HTTP/1.1(1997 / 1999):持久连接、Host 虚拟主机、分块传输、缓存控制,用了二十多年
  • HTTP/2(2015):源自 Google 的 SPDY,二进制分帧 + 多路复用,主攻性能
  • HTTP/3(2022,RFC 9114):跑在 QUIC 上,现在主流浏览器和大 CDN 都已支持
  • 主线:前期补功能,后期提速度;URL、方法、状态码这套语义一直没变

HTTP 的演进可以分两段看:1.1 之前是在补功能,1.1 之后是在提性能。 0.9 简单到只能 GET 一个 HTML 页面;1.0 有了头部和状态码,可以传图片;1.1 补上持久连接和 Host,一台服务器能托管多个站,这套协议撑了二十多年。后来网页越来越重,HTTP/2 从 SPDY 演化出来解决并发问题,HTTP/3 又换到 QUIC 解决 TCP 的队头阻塞。面试时我会强调一点:版本再怎么升,方法、状态码、头字段的含义都没变,变的是怎么传。

  • HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文
  • HTTP/0.9 是个简单的文本协议,只能获取文本资源;
  • HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准;
  • HTTP/1.1 是目前互联网上使用最广泛的协议,功能也非常完善;
  • HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及;
  • HTTP/3 基于 Google 的 QUIC 协议,是将来的发展方向

原理拆解: HTTP 的演进可以分成两条主线:一条扩充语义能力,另一条改善传输效率。HTTP/0.9 只有极简资源获取;HTTP/1.0 增加状态码、头部和多种内容类型等机制;HTTP/1.1 进一步规范持久连接、缓存、分块传输和虚拟主机。HTTP/2 保留方法、状态码和头部等上层语义,但将传输改为二进制分帧,并在单条连接上复用多个流。HTTP/3 再把承载层转向基于 UDP 的 QUIC,降低传输层队头阻塞及连接建立成本。

最小验证: 输入同一个 HTTPS 地址,分别要求 curl 尝试不同协议,并打印最终协商到的版本;要验证的结论是资源语义相同,而协商出的传输版本可以不同。

curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http1.1 https://example.com/
curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http2 https://example.com/
curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http3 https://example.com/
@前端进阶之旅: 代码已经复制到剪贴板

第一行通常输出 HTTP/1.1;后两行只有在本机 curl、TLS 库、目标站点和网络链路共同支持时,才可能输出 HTTP/2 或 HTTP/3。命令仍访问同一 URL,说明版本升级主要改变连接与传输方式,并未废弃 URL、方法和状态码等核心语义。

边界与排查: HTTP/2 源自 SPDY 的实践,但不是把 SPDY 名称直接延续下来;HTTP/3 基于 QUIC,其标准化与部署状态也不能沿用早期资料中的“未来协议”判断。若命令报“不支持该选项”,应先用 curl -V 查看编译能力;若协商降级,则检查服务端协议配置、TLS 的 ALPN、代理支持和网络是否限制 UDP。

面试官追问

追问 1接口升级 h2 后 URL、状态码一个没变,能说协议没变吗?
参考回答

不能。变的是传输方式:1.1 是文本、一条连接一次一个请求,h2 是二进制帧、一条连接并发多个流。语义层故意保持兼容,就是为了业务不用改。

追问 2HTTP/1.0 和 1.1 最关键的区别是什么?
参考回答

两个:1.1 默认持久连接,不用每个请求都重新三次握手;1.1 强制要求 Host 头,一个 IP 上可以跑多个网站。再往下就是分块传输、Cache-Control、ETag 这些缓存能力。

追问 3怎么不改代码确认线上站点支持哪些版本?
参考回答

curl -sI --http2 https://example.com -o /dev/null -w '%{http_version}\n',输出 2 就是支持 h2;换 --http3 试 h3,前提是本机 curl 编译时带了对应能力,curl -V 能看到。

追问 4HTTP/2 就是 SPDY 改了个名吗?
参考回答

不是。HTTP/2 以 SPDY 为蓝本标准化,但改了不少,比如头部压缩从 SPDY 的 deflate 换成了 HPACK,因为前者有 CRIME 攻击风险。Chrome 在 2016 年就移除了 SPDY。

基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
  • HTTP

    • 基础篇

      • HTTP的前世今生
      • HTTP是什么
      • HTTP世界全览
      • HTTP分层
      • 键入网址到回车发生什么
      • HTTP报文是什么样子的
      • 理解请求方法
      • URI
      • 响应状态码
      • HTTP有哪些特点
      • HTTP优缺点
      • HTTP的实体数据
      • HTTP传输大文件
      • HTTP的连接管理
      • HTTP的重定向
      • HTTP的Cookie机制
      • HTTP的缓存控制
      • HTTP的代理服务
      • HTTP的缓存代理
    • 高级篇

    • 扩展篇

  • 浏览器相关

  • 计算机基础

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

HTTP的前世今生|HTTP协议篇

# HTTP的前世今生

30 秒速记

  • HTTP/0.9(1991):只有 GET,只能拿 HTML,没有头部和状态码
  • HTTP/1.0(1996,RFC 1945):加了头部、状态码、Content-Type,能传图片了,但只是信息性文档不是正式标准
  • HTTP/1.1(1997 / 1999):持久连接、Host 虚拟主机、分块传输、缓存控制,用了二十多年
  • HTTP/2(2015):源自 Google 的 SPDY,二进制分帧 + 多路复用,主攻性能
  • HTTP/3(2022,RFC 9114):跑在 QUIC 上,现在主流浏览器和大 CDN 都已支持
  • 主线:前期补功能,后期提速度;URL、方法、状态码这套语义一直没变

HTTP 的演进可以分两段看:1.1 之前是在补功能,1.1 之后是在提性能。 0.9 简单到只能 GET 一个 HTML 页面;1.0 有了头部和状态码,可以传图片;1.1 补上持久连接和 Host,一台服务器能托管多个站,这套协议撑了二十多年。后来网页越来越重,HTTP/2 从 SPDY 演化出来解决并发问题,HTTP/3 又换到 QUIC 解决 TCP 的队头阻塞。面试时我会强调一点:版本再怎么升,方法、状态码、头字段的含义都没变,变的是怎么传。

  • HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文
  • HTTP/0.9 是个简单的文本协议,只能获取文本资源;
  • HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准;
  • HTTP/1.1 是目前互联网上使用最广泛的协议,功能也非常完善;
  • HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及;
  • HTTP/3 基于 Google 的 QUIC 协议,是将来的发展方向

原理拆解: HTTP 的演进可以分成两条主线:一条扩充语义能力,另一条改善传输效率。HTTP/0.9 只有极简资源获取;HTTP/1.0 增加状态码、头部和多种内容类型等机制;HTTP/1.1 进一步规范持久连接、缓存、分块传输和虚拟主机。HTTP/2 保留方法、状态码和头部等上层语义,但将传输改为二进制分帧,并在单条连接上复用多个流。HTTP/3 再把承载层转向基于 UDP 的 QUIC,降低传输层队头阻塞及连接建立成本。

最小验证: 输入同一个 HTTPS 地址,分别要求 curl 尝试不同协议,并打印最终协商到的版本;要验证的结论是资源语义相同,而协商出的传输版本可以不同。

curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http1.1 https://example.com/
curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http2 https://example.com/
curl -sS -o /dev/null -w 'HTTP/%{http_version}\n' --http3 https://example.com/
@前端进阶之旅: 代码已经复制到剪贴板

第一行通常输出 HTTP/1.1;后两行只有在本机 curl、TLS 库、目标站点和网络链路共同支持时,才可能输出 HTTP/2 或 HTTP/3。命令仍访问同一 URL,说明版本升级主要改变连接与传输方式,并未废弃 URL、方法和状态码等核心语义。

边界与排查: HTTP/2 源自 SPDY 的实践,但不是把 SPDY 名称直接延续下来;HTTP/3 基于 QUIC,其标准化与部署状态也不能沿用早期资料中的“未来协议”判断。若命令报“不支持该选项”,应先用 curl -V 查看编译能力;若协商降级,则检查服务端协议配置、TLS 的 ALPN、代理支持和网络是否限制 UDP。

面试官追问

追问 1接口升级 h2 后 URL、状态码一个没变,能说协议没变吗?
参考回答

不能。变的是传输方式:1.1 是文本、一条连接一次一个请求,h2 是二进制帧、一条连接并发多个流。语义层故意保持兼容,就是为了业务不用改。

追问 2HTTP/1.0 和 1.1 最关键的区别是什么?
参考回答

两个:1.1 默认持久连接,不用每个请求都重新三次握手;1.1 强制要求 Host 头,一个 IP 上可以跑多个网站。再往下就是分块传输、Cache-Control、ETag 这些缓存能力。

追问 3怎么不改代码确认线上站点支持哪些版本?
参考回答

curl -sI --http2 https://example.com -o /dev/null -w '%{http_version}\n',输出 2 就是支持 h2;换 --http3 试 h3,前提是本机 curl 编译时带了对应能力,curl -V 能看到。

追问 4HTTP/2 就是 SPDY 改了个名吗?
参考回答

不是。HTTP/2 以 SPDY 为蓝本标准化,但改了不少,比如头部压缩从 SPDY 的 deflate 换成了 HPACK,因为前者有 CRIME 攻击风险。Chrome 在 2016 年就移除了 SPDY。

HTTP是什么 →

fe