前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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的缓存代理
    • 高级篇

    • 扩展篇

  • 浏览器相关

  • 计算机基础

# 键入网址到回车发生什么

30 秒速记

  • 主线:解析 URL → DNS 拿 IP → TCP 三次握手 → TLS 握手(HTTPS)→ 发请求 → 收响应 → 渲染
  • DNS 查找顺序:浏览器缓存 → 系统缓存 / hosts → 本地 DNS 服务器递归查询
  • 每一步都可能被缓存短路:强缓存命中连请求都不发,连接复用省掉握手,DNS 缓存省掉解析
  • 现实链路中间还有 CDN、代理、网关,但理论上可以简化成「请求方 ↔ 应答方」两点
  • DNS 成功 ≠ 能访问,端口、证书、服务端任何一环都能断

回车之后,浏览器要先拿到 IP、建好连接,才能按 HTTP 格式把请求发出去。 具体就是:先看缓存里有没有这个域名的 IP,没有就问 DNS;拿到 IP 后 TCP 三次握手,HTTPS 再做一次 TLS 握手;然后发请求行和头部,服务器处理完回状态码和内容,浏览器拿去解析渲染。实际中每一步都有缓存,资源还在强缓存有效期内就直接从本地读,连网络都不碰;连接还开着就复用,省掉握手。面试我会把缓存短路这层讲出来,这是区分背流程和真理解的地方。

  • HTTP 协议基于底层的 TCP/IP 协议,所以必须要用 IP 地址建立连接
  • 如果不知道 IP 地址,就要用 DNS 协议去解析得到 IP 地址,否则就会连接失败
  • 建立 TCP 连接后会顺序收发数据,请求方和应答方都必须依据 HTTP 规范构建和解析报文
  • 为了减少响应时间,整个过程中的每一个环节都会有缓存,能够实现“短路”操作
  • 虽然现实中的 HTTP 传输过程非常复杂,但理论上仍然可以简化成实验里的“两点”模型

原理拆解: 浏览器先解析网址,得到协议、主机、端口和路径。若目标是域名,系统需从浏览器缓存、操作系统缓存或 DNS 查询中取得 IP;随后选择可达地址建立连接。传统 HTTP/1.1 和 HTTP/2 通常依赖 TCP,使用 HTTPS 时还要在其上完成 TLS 握手。连接可用后,浏览器发送包含请求方法、路径和头字段的报文,服务器处理并返回状态码、响应头与响应体。

具体例子: 访问 https://example.com/a 时,若域名和连接都未缓存,链路至少包含域名解析、TCP 建连、TLS 握手和 HTTP 交换。若已有可复用连接,便可跳过重新建连;若浏览器缓存中的响应仍可直接使用,则可能连请求都不发送。缓存因此不是单一节点,而是能在解析、连接复用、代理和内容获取等不同阶段形成短路。

边界与排查: DNS 成功不代表页面一定可达,目标端口拒绝连接、证书校验失败或服务器返回错误状态都可能中断后续流程;输入 IP 也未必能替代域名,因为虚拟主机选择和证书校验仍可能依赖主机名。验证时可在浏览器开发者工具的网络面板检查请求是否来自缓存、连接耗时和响应状态,并用 curl -v https://example.com/a 观察解析、连接、TLS 与 HTTP 响应阶段。若面板没有网络请求,应先排查缓存或页面脚本;若停在连接阶段,则应从 DNS、端口可达性和证书链逐层定位。

面试官追问

追问 1你说先查 DNS 再建连接,可 Network 面板里这个资源根本没发请求,为什么?
参考回答

命中了强缓存。Cache-Control: max-age 还没过期,浏览器直接从 memory cache 或 disk cache 拿,Size 列显示 (disk cache),整个网络流程都被跳过了。

追问 2怎么看出一次请求的耗时花在哪个阶段?
参考回答

Network 面板点开请求看 Timing:DNS Lookup、Initial connection、SSL、Waiting for server response(TTFB)、Content Download 分得很清楚。命令行可以用 curl -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_starttransfer}\n' -o /dev/null -s URL。

追问 3HTTP 改成 HTTPS 后首屏慢了一点,多出来的是哪一步?
参考回答

多了 TLS 握手,TLS 1.2 要 2 个往返,TLS 1.3 是 1 个。可以开 TLS 1.3、会话复用、OCSP Stapling 把它压下来,再加 HSTS 省掉 http 跳 https 那次重定向。

追问 4要给首屏提速,第三方域名的连接能提前建吗?
参考回答

能。<link rel="preconnect" href="https://cdn.example.com"> 让浏览器提前做 DNS + TCP + TLS,真正请求时直接发;只想提前解析就用 dns-prefetch。别给所有域名都加,没用上的连接是浪费。

基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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协议篇

# 键入网址到回车发生什么

30 秒速记

  • 主线:解析 URL → DNS 拿 IP → TCP 三次握手 → TLS 握手(HTTPS)→ 发请求 → 收响应 → 渲染
  • DNS 查找顺序:浏览器缓存 → 系统缓存 / hosts → 本地 DNS 服务器递归查询
  • 每一步都可能被缓存短路:强缓存命中连请求都不发,连接复用省掉握手,DNS 缓存省掉解析
  • 现实链路中间还有 CDN、代理、网关,但理论上可以简化成「请求方 ↔ 应答方」两点
  • DNS 成功 ≠ 能访问,端口、证书、服务端任何一环都能断

回车之后,浏览器要先拿到 IP、建好连接,才能按 HTTP 格式把请求发出去。 具体就是:先看缓存里有没有这个域名的 IP,没有就问 DNS;拿到 IP 后 TCP 三次握手,HTTPS 再做一次 TLS 握手;然后发请求行和头部,服务器处理完回状态码和内容,浏览器拿去解析渲染。实际中每一步都有缓存,资源还在强缓存有效期内就直接从本地读,连网络都不碰;连接还开着就复用,省掉握手。面试我会把缓存短路这层讲出来,这是区分背流程和真理解的地方。

  • HTTP 协议基于底层的 TCP/IP 协议,所以必须要用 IP 地址建立连接
  • 如果不知道 IP 地址,就要用 DNS 协议去解析得到 IP 地址,否则就会连接失败
  • 建立 TCP 连接后会顺序收发数据,请求方和应答方都必须依据 HTTP 规范构建和解析报文
  • 为了减少响应时间,整个过程中的每一个环节都会有缓存,能够实现“短路”操作
  • 虽然现实中的 HTTP 传输过程非常复杂,但理论上仍然可以简化成实验里的“两点”模型

原理拆解: 浏览器先解析网址,得到协议、主机、端口和路径。若目标是域名,系统需从浏览器缓存、操作系统缓存或 DNS 查询中取得 IP;随后选择可达地址建立连接。传统 HTTP/1.1 和 HTTP/2 通常依赖 TCP,使用 HTTPS 时还要在其上完成 TLS 握手。连接可用后,浏览器发送包含请求方法、路径和头字段的报文,服务器处理并返回状态码、响应头与响应体。

具体例子: 访问 https://example.com/a 时,若域名和连接都未缓存,链路至少包含域名解析、TCP 建连、TLS 握手和 HTTP 交换。若已有可复用连接,便可跳过重新建连;若浏览器缓存中的响应仍可直接使用,则可能连请求都不发送。缓存因此不是单一节点,而是能在解析、连接复用、代理和内容获取等不同阶段形成短路。

边界与排查: DNS 成功不代表页面一定可达,目标端口拒绝连接、证书校验失败或服务器返回错误状态都可能中断后续流程;输入 IP 也未必能替代域名,因为虚拟主机选择和证书校验仍可能依赖主机名。验证时可在浏览器开发者工具的网络面板检查请求是否来自缓存、连接耗时和响应状态,并用 curl -v https://example.com/a 观察解析、连接、TLS 与 HTTP 响应阶段。若面板没有网络请求,应先排查缓存或页面脚本;若停在连接阶段,则应从 DNS、端口可达性和证书链逐层定位。

面试官追问

追问 1你说先查 DNS 再建连接,可 Network 面板里这个资源根本没发请求,为什么?
参考回答

命中了强缓存。Cache-Control: max-age 还没过期,浏览器直接从 memory cache 或 disk cache 拿,Size 列显示 (disk cache),整个网络流程都被跳过了。

追问 2怎么看出一次请求的耗时花在哪个阶段?
参考回答

Network 面板点开请求看 Timing:DNS Lookup、Initial connection、SSL、Waiting for server response(TTFB)、Content Download 分得很清楚。命令行可以用 curl -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_starttransfer}\n' -o /dev/null -s URL。

追问 3HTTP 改成 HTTPS 后首屏慢了一点,多出来的是哪一步?
参考回答

多了 TLS 握手,TLS 1.2 要 2 个往返,TLS 1.3 是 1 个。可以开 TLS 1.3、会话复用、OCSP Stapling 把它压下来,再加 HSTS 省掉 http 跳 https 那次重定向。

追问 4要给首屏提速,第三方域名的连接能提前建吗?
参考回答

能。<link rel="preconnect" href="https://cdn.example.com"> 让浏览器提前做 DNS + TCP + TLS,真正请求时直接发;只想提前解析就用 dns-prefetch。别给所有域名都加,没用上的连接是浪费。

← HTTP分层HTTP报文是什么样子的 →

fe