作者信息:https://home.cnblogs.com/u/huangjiabobk

在Linux中,访问一个网站的流程是什么?

在 Linux 系统中,访问一个网站的流程涉及多个层次和组件的协同工作,从用户在浏览器中输入网址到最终看到网页内容,整个过程可以分为以下几个主要步骤:

1. 用户输入网址

用户在浏览器地址栏中输入一个网址(例如 http://www.example.com),并按下回车键。

2. 域名解析(DNS 查询)

浏览器首先需要将输入的域名解析为对应的 IP 地址。这个过程通常通过域名系统(DNS)完成。

2.1 DNS 查询流程
  1. 本地缓存查询:浏览器首先检查本地缓存,看是否已经有该域名对应的 IP 地址。
  2. 操作系统缓存查询:如果浏览器缓存中没有,浏览器会请求操作系统的 DNS 缓存。
  3. 递归查询
    • 如果本地缓存和操作系统缓存都没有,浏览器会向配置的 DNS 服务器(通常是本地路由器或 ISP 提供的 DNS 服务器)发送查询请求。
    • DNS 服务器会检查自己的缓存,如果找到对应的 IP 地址,直接返回给浏览器。
    • 如果 DNS 服务器缓存中也没有,它会向上游 DNS 服务器(如根域名服务器、顶级域名服务器等)发起查询。
  4. 返回结果:最终,DNS 服务器将域名对应的 IP 地址返回给浏览器。
3. 建立 TCP 连接

浏览器获取到目标服务器的 IP 地址后,会通过 TCP 协议建立到该 IP 地址的连接。

3.1 TCP 三次握手
  1. SYN(同步):浏览器向服务器发送一个 SYN 包,表示请求建立连接。
  2. SYN-ACK(同步-确认):服务器收到 SYN 包后,回复一个 SYN-ACK 包,表示确认收到请求并同意建立连接。
  3. ACK(确认):浏览器收到 SYN-ACK 包后,回复一个 ACK 包,表示确认收到服务器的响应,此时 TCP 连接建立完成。
4. 发送 HTTP/HTTPS 请求

TCP 连接建立后,浏览器会通过 HTTP 或 HTTPS 协议向服务器发送请求。

4.1 HTTP 请求格式

GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
...

4.2 HTTPS 请求

如果使用 HTTPS 协议,浏览器和服务器之间会进行 SSL/TLS 握手,以建立加密通道:

  1. 客户端 Hello:浏览器向服务器发送一个包含支持的加密算法、协议版本等信息的 Hello 消息。
  2. 服务器 Hello:服务器选择一种加密算法,回复一个 Hello 消息。
  3. 证书交换:服务器发送其 SSL 证书,浏览器验证证书的有效性。
  4. 密钥交换:浏览器和服务器协商生成会话密钥,用于后续的加密通信。
  5. 加密通信:完成 SSL/TLS 握手后,双方通过加密通道发送 HTTP 请求和响应。
5. 服务器处理请求

服务器(如 Nginx、Apache 等)接收到 HTTP/HTTPS 请求后,会根据配置进行处理。

5.1 处理流程
  1. 解析请求:服务器解析请求头,确定请求的资源路径、方法等信息。
  2. 查找资源
    • 如果请求的是静态资源(如 HTML、CSS、图片等),服务器会从文件系统中读取对应的文件。
    • 如果请求的是动态资源(如 PHP、Python 脚本等),服务器会将请求转发给后端应用服务器(如 PHP-FPM、uWSGI 等)进行处理。
  3. 生成响应:服务器根据请求的内容生成 HTTP 响应,包括状态码、响应头和响应体。
6. 返回 HTTP/HTTPS 响应

服务器将生成的响应通过 TCP 连接返回给浏览器。

6.1 HTTP 响应格式
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
...
<!DOCTYPE html>
<html>
<head>...</head>
<body>...</body>
</html>
7. 浏览器渲染页面

浏览器接收到服务器的响应后,开始解析和渲染页面。

7.1 渲染流程
  1. 解析 HTML:浏览器解析 HTML 文档,构建 DOM 树。
  2. 解析 CSS:浏览器解析 CSS 文件,构建 CSSOM 树。
  3. 构建渲染树:浏览器将 DOM 树和 CSSOM 树合并,构建渲染树。
  4. 布局和绘制:浏览器计算每个元素的布局位置,并将页面绘制到屏幕上。
8. 加载额外资源

页面中可能包含额外的资源(如图片、JavaScript 文件等),浏览器会发起额外的 HTTP/HTTPS 请求来加载这些资源,并在页面中渲染它们。

9. 关闭 TCP 连接

页面加载完成后,浏览器会关闭与服务器的 TCP 连接(除非使用了 HTTP/1.1 的 keep-alive 或 HTTP/2 的持久连接)。

10. 用户交互

用户可以在浏览器中与页面进行交互,例如点击链接、提交表单等。这些操作可能会触发新的 HTTP/HTTPS 请求,重复上述流程。

11. 我的总结

综上所述,访问一个网站的过程涉及多个层次的网络协议和组件的协同工作,从域名解析、TCP 连接建立、HTTP/HTTPS 请求发送、服务器处理请求、返回响应,到浏览器渲染页面,每一步都至关重要。了解这个流程有助于更好地理解网络通信的机制,以及如何优化和调试 Web 应用。

posted @ 2025-03-20 23:09  黄嘉波  阅读(279)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波