在浏览器中输入一个网址,它的运行过程是什么样的?

当在浏览器地址栏输入一个网址(如 https://www.example.com)并按下 Enter 后,背后会发生一系列复杂的操作。整个过程可以分为以下几个关键步骤:


1. URL 解析

用户输入的网址(URL, Uniform Resource Locator)通常包含以下部分:

https://www.example.com:443/path/page.html?query=123#section1

各部分解析:

  • 协议(Scheme):https:// 指定了通信协议(HTTPS)。
  • 主机名(Host):www.example.com 需要解析成 IP 地址。
  • 端口号(Port):HTTPS 默认端口是 443,HTTP 默认端口是 80
  • 路径(Path):/path/page.html 指定了服务器上的资源路径。
  • 查询参数(Query):?query=123 传递额外数据给服务器。
  • 片段标识符(Fragment):#section1 仅在前端使用,不会发送给服务器。

2. DNS 解析(域名解析)

浏览器需要将域名www.example.com)转换成 IP 地址(如 192.168.1.1)。DNS 解析过程如下:

  1. 浏览器缓存:先检查是否已有该域名的 IP 地址缓存。
  2. 操作系统缓存:如果浏览器没有缓存,则查询操作系统的 DNS 缓存。
  3. 本地 Hosts 文件:系统会检查 hosts 文件(如 C:\Windows\System32\drivers\etc\hosts)。
  4. 本地 DNS 服务器(ISP 提供的)
    • 若缓存无匹配,则查询本地 DNS 服务器。
    • 若本地 DNS 没有缓存,它会向 根 DNS 服务器 查询。
  5. 根 DNS 服务器顶级域(TLD)服务器(如 .com) → 权威 DNS 服务器 逐级解析。
  6. 返回 IP 地址,浏览器可以使用这个 IP 访问服务器。

3. 建立 TCP 连接(三次握手)

获得 IP 地址后,浏览器与服务器建立 TCP 连接

  1. 客户端 → 服务器发送 SYN 请求。
  2. 服务器 → 客户端返回 SYN-ACK。
  3. 客户端 → 服务器发送 ACK,连接建立。

4. 发送 HTTPS 请求

由于是 HTTPS,浏览器会先与服务器建立 TLS/SSL 加密通道(TLS 握手):

  1. 客户端 发送 ClientHello(支持的加密算法、随机数)。
  2. 服务器 发送 ServerHello(选择的加密算法、服务器证书)。
  3. 客户端 验证证书,生成会话密钥,并加密发送给服务器。
  4. 服务器 解密密钥,双方使用对称加密进行安全通信。

之后,浏览器发送 HTTP 请求

GET /path/page.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

5. 服务器处理请求

服务器收到请求后:

  1. 检查 防火墙权限控制,确保允许访问。
  2. 后端处理
    • 静态资源:如 HTML、CSS、JS 直接返回。
    • 动态资源(如 PHP、Python、Node.js):服务器运行代码,查询数据库,生成 HTML 响应。
  3. 数据库查询
    • 若请求需要数据(如查询用户信息),服务器查询数据库(MySQL, PostgreSQL)。
  4. 生成 HTTP 响应
    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 1024
    
    并附上 HTML 文件。

6. 浏览器接收响应

浏览器收到服务器的响应后:

  1. 检查状态码
    • 200 OK:请求成功。
    • 301 Moved Permanently:重定向,浏览器访问新地址。
    • 404 Not Found:资源不存在。
    • 500 Internal Server Error:服务器错误。
  2. 解析 HTML
    • HTML 解析器解析 DOM 树。
    • 解析 <link> 引入的 CSS 文件。
    • 解析 <script> 执行 JavaScript 代码。

7. 渲染页面

  1. CSS 解析
    • 根据 CSS 规则计算元素样式。
  2. JavaScript 执行
    • 若有 document.write() 或 AJAX 请求,可能会修改 DOM。
  3. 合成(Compositing)
    • 生成布局(Layout)树,计算元素的位置。
    • 分层(Layer)合成,优化动画与滚动性能。
  4. 绘制(Painting)
    • GPU 加速渲染页面。

8. 处理后续请求

  1. 如果 HTML 包含图片、CSS、JS,浏览器会并行发送多个请求:
    • GET /style.css
    • GET /script.js
    • GET /image.jpg
  2. 浏览器缓存静态资源,加快加载速度。

9. 页面呈现

最终,浏览器完成 HTML、CSS、JS 解析,用户看到完整页面。


10. 关闭连接

  • 短连接(默认 HTTP/1.0):服务器处理完请求后关闭 TCP 连接(四次挥手)。
  • 长连接(HTTP/1.1+ 默认开启):使用 Keep-Alive 复用 TCP 连接,提高性能。

总结

整个过程如下:

  1. 解析 URL
  2. DNS 解析,获取服务器 IP
  3. TCP 三次握手
  4. TLS/SSL 握手(HTTPS)
  5. 发送 HTTP 请求
  6. 服务器处理请求,查询数据库
  7. 返回 HTTP 响应
  8. 浏览器解析 HTML、CSS、JS
  9. 渲染页面
  10. 加载后续资源
  11. 页面呈现
  12. 关闭 TCP 连接(或保持长连接)

这个过程涉及 网络通信、加密、浏览器解析、渲染 等多个领域,是 Web 运行的核心原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值