# 输入一个 url 会发生什么

本问题在之前的学习合集文章 ———— 计算机网络与浏览器原理篇有过总结,因为本问题经典、关键、常见,所以此处单独开一篇博文再次作以更为详细的总结~

# 输入一个 url 会发生什么?

  1. URL 解析
  • 步骤:

  • 浏览器解析用户输入的 URL,提取协议(如 http 或 https)、域名(如 google.com)、端口(默认 80 或 443)、路径和查询参数。

  • 示例:

输入 https://www.google.com/search?q=vue,浏览器会解析出:

协议:https

域名:www.google.com

路径:/search

查询参数:q=vue

  1. DNS 查询

步骤:

  • 浏览器通过 DNS(域名系统)将域名解析为对应的 IP 地址。

  • 如果本地缓存中有域名对应的 IP 地址,则直接使用;否则,浏览器会向 DNS 服务器发起查询请求。

示例:

解析 www.google.com 可能会返回 142.250.190.78。

  1. 建立 TCP 连接

步骤:

  • 浏览器通过 IP 地址和端口与服务器建立 TCP 连接。

  • 如果是 HTTPS,还会进行 TLS 握手,建立加密通道。

示例:

与 142.250.190.78:443 建立 TCP 连接,并进行 TLS 握手。

  1. 发送 HTTP 请求

步骤:

  • 浏览器向服务器发送 HTTP 请求,包括请求方法(如 GET)、路径、请求头和请求体。

示例:

发送 GET /search?q=vue HTTP/1.1 请求。

  1. 服务器处理请求

步骤:

  • 服务器接收到请求后,根据路径和参数处理请求,生成响应数据(如 HTML 页面)。

  • 服务器返回 HTTP 响应,包括状态码(如 200)、响应头和响应体。

示例:

服务器返回 200 OK 和 Google 搜索结果的 HTML 页面。

  1. 浏览器接收响应

步骤:

  • 浏览器接收到服务器的响应后,开始解析响应内容。

  • 如果是 HTML 页面,浏览器会解析 HTML、CSS 和 JavaScript,并加载页面所需的资源(如图片、样式表、脚本等)。

示例:

解析 Google 搜索结果的 HTML,并加载相关资源。

  1. 渲染页面

步骤:

  • 浏览器根据 HTML 和 CSS 构建 DOM 树和 CSSOM 树,然后合并生成渲染树。

  • 根据渲染树计算布局,绘制页面内容。

  • 执行 JavaScript 代码,动态更新页面。

示例:

渲染 Google 搜索结果的页面,并显示给用户。

  1. 加载完成

步骤:

  • 页面加载完成后,触发 load 事件。

  • 如果有异步操作(如 AJAX 请求),页面可能会继续更新。

示例:

Google 搜索页面加载完成后,用户可以与页面交互。

# 如果 URL 是 google.com 会有什么不同?

  1. 域名解析:

特殊情况:

在国内,由于网络限制,本地 DNS 服务器可能无法解析 google.com 的 IP 地址。

如果用户没有使用 “梯子”(VPN 或代理),DNS 查询会失败,浏览器会显示 “无法访问此网站” 或类似的错误。

如果用户使用了 “梯子”,DNS 查询会通过代理服务器进行,成功解析到 google.com 的 IP 地址(如 142.250.190.78)。

浏览器会解析 google.com,但通常会重定向到 www.google.com(Google 的主域名)。

例如,输入 google.com 后,浏览器可能会收到 301 或 302 重定向响应,指向 https://www.google.com

  1. HTTPS 强制跳转:

Google 会强制使用 HTTPS,因此即使输入 http://google.com,浏览器也会重定向到 https://www.google.com

  1. 首页内容:

如果访问的是 https://www.google.com,服务器会返回 Google 搜索首页的 HTML 页面。

页面内容相对简单,主要是搜索框和一些链接。

  1. 资源加载:

Google 首页的资源(如图片、CSS、JavaScript)通常较少,加载速度较快。

Google 会使用 CDN 和缓存技术,进一步加速页面加载。

  1. 用户体验:

Google 首页设计简洁,加载速度快,用户可以立即进行搜索操作。

# 总结

输入 URL 后,浏览器会执行以下步骤:

  1. URL 解析:提取协议、域名、路径等信息。

  2. DNS 查询:将域名解析为 IP 地址。

  3. 建立 TCP 连接:与服务器建立连接(HTTPS 还会进行 TLS 握手)。

  4. 发送 HTTP 请求:向服务器发送请求。

  5. 服务器处理请求:服务器生成响应并返回。

  6. 浏览器接收响应:解析 HTML、CSS 和 JavaScript。

  7. 渲染页面:构建 DOM 树、CSSOM 树,绘制页面。

  8. 加载完成:页面显示并触发 load 事件。