web 网页数据传输处理过程

在说这个问题之前,先说一些专用技术、软件、数据库等

前端 SPA 应用的含义和工作原理

一、前端 SPA 应用的含义

前端 SPA 应用 (Single-Page Application,单页应用)是一种现代前端开发架构,其核心特点是整个应用仅加载一个主 HTML 页面 ,后续的页面交互、内容更新都通过动态加载数据和修改 DOM实现,而无需重新请求和加载新的完整 HTML 页面。

简单来说,SPA 就像一个 "本地应用":打开后页面不会整体刷新,所有操作都在同一个窗口内完成,仅更新需要变化的部分内容。

二、SPA 的工作原理(以 "页面切换" 为例)

  1. 首次加载 :用户访问https://example.com时,服务器返回唯一的index.html,以及依赖的 JS/CSS 资源。浏览器加载后执行 JS,渲染出初始页面(如 "首页")。
  2. 路由监听 :前端路由(如 Vue Router)监听 URL 的变化。当用户点击 "关于我们" 按钮时,JS 会修改 URL(如改为https://example.com/#/abouthttps://example.com/about,后者依赖 History API),但不会向服务器发送请求。
  3. 数据请求 :路由匹配到 "关于我们" 视图后,前端通过 AJAX/Fetch 调用 API(如https://example.com/api/about),从服务器获取 "关于我们" 的文本、图片等数据。
  4. 视图更新:前端框架(如 Vue、React)利用虚拟 DOM 技术,仅更新页面中 "关于我们" 对应的 DOM 区域,而不刷新整个页面,实现无缝的内容切换。

URL的含义与基本结构

一、URL的含义

URL(Uniform Resource Locator,统一资源定位符)是互联网上用于标识和定位资源的字符串,通俗来说就是我们常说的 "网址"。它的核心作用是告诉浏览器(或其他客户端):"如何获取" 以及 "去哪里获取" 某个资源(如网页、图片、视频、API 接口等)。

二、URL 的基本结构

一个完整的 URL 由多个部分组成,格式通常为:

复制代码
协议://域名[:端口]/路径[?查询参数][#片段标识符]

以下是各部分的详细说明(以示例 https://www.example.com:8080/path/to/page?name=test&id=1#section1 为例):

1. 协议(Scheme)
  • 作用:规定客户端与服务器之间的通信规则(如何传输数据)。
  • 示例https(超文本传输安全协议)
  • 常见协议
    • http:超文本传输协议(不加密,安全性低)。
    • https:基于 SSL/TLS 的加密版 HTTP(主流,保护数据传输安全)。
    • ftp/ftps:文件传输协议(用于传输文件)。
    • mailto:用于发送邮件(如 mailto:user@example.com)。
    • file:访问本地文件(如 file:///C:/document.txt)。
2. 域名(Domain Name)
  • 作用:标识服务器的网络地址(替代难记的 IP 地址)。
  • 示例www.example.com
  • 组成 :通常由 "主机名"+"域名" 构成,如 www 是主机名(服务器的具体名称),example.com 是注册的域名。
  • 注意 :域名需通过 DNS 解析为 IP 地址(如 www.example.com 解析为 192.168.1.1),客户端才能与服务器通信。
3. 端口(Port)
  • 作用:标识服务器上的具体 "服务端口"(一台服务器可同时运行多个服务,通过端口区分)。
  • 示例8080(非默认端口,需显式指定)
  • 默认端口 :协议通常有默认端口,可省略不写:
    • http 默认端口:80(如 http://example.com 等价于 http://example.com:80)。
    • https 默认端口:443(如 https://example.com 等价于 https://example.com:443)。
4. 路径(Path)
  • 作用:指定服务器上资源的具体位置(类似文件系统的文件夹 / 文件路径)。
  • 示例/path/to/page(表示服务器上 path 文件夹下 to 子文件夹中的 page 资源)。
  • 注意 :路径以 / 开头,可包含多个层级(如 /api/user/list 表示 API 接口的路径)。
5. 查询参数(Query Parameters)
  • 作用:向服务器传递额外的 "键值对" 信息(如筛选条件、分页参数等)。
  • 示例?name=test&id=1
  • 规则
    • ? 开头,多个参数用 & 分隔(如 ?page=1&size=10)。
    • 参数格式为 键=值(如 name=test 表示 "名称为 test")。
    • 特殊字符(如空格、中文)需编码(如空格编码为 %20+,中文 你好 编码为 %E4%BD%A0%E5%A5%BD)。
6. 片段标识符(Fragment)
  • 作用:定位页面内的具体位置(如某个章节、锚点),仅在客户端生效(不会发送到服务器)。
  • 示例#section1
  • 效果 :浏览器加载页面后,会自动滚动到页面中 id="section1" 的元素位置(如 <div id="section1">...</div>)。

web 网页通信过程

Web 网页的通信过程是指从用户在浏览器输入 URL(或点击链接)到页面最终显示在屏幕上的整个交互流程,涉及浏览器、DNS 服务器、Web 服务器 等多个角色,以及DNS 解析、TCP 连接、HTTP 请求 / 响应等多个协议的协作。

一、核心流程概览

整个过程可简化为以下步骤:
用户输入URL → 浏览器解析URL → DNS域名解析 → 建立TCP连接 → 发送HTTP请求 → 服务器处理请求 → 返回HTTP响应 → 浏览器渲染页面 → 关闭连接

二、详细步骤解析

1. 用户输入 URL 并触发请求

用户在浏览器地址栏输入 URL(如https://www.example.com/path),或点击页面中的链接,浏览器首先判断这是一个网页请求,开始处理。

2. 浏览器解析 URL

URL(统一资源定位符)是访问资源的地址,浏览器需要解析出其中的关键信息:

  • 协议 :如http(超文本传输协议)或https(加密的 HTTP,基于 TLS/SSL)。
  • 域名 :如www.example.com(服务器的 "网络名字")。
  • 端口:协议默认端口(HTTP 默认 80,HTTPS 默认 443,若 URL 中未指定则使用默认)。
  • 路径 :如/path(服务器上资源的具体位置)。
  • 查询参数 :如?id=1&name=test(向服务器传递的额外信息)。
3. DNS 域名解析:将域名转换为 IP 地址

计算机之间通过IP 地址 (如192.168.1.1)通信,但用户记忆的是域名(如www.example.com),因此需要通过DNS(域名系统) 将域名解析为 IP 地址。

解析过程(类似 "查通讯录"):

  • 浏览器缓存:先检查浏览器本地缓存(近期解析过的域名),若有直接使用。
  • 操作系统缓存:若浏览器缓存无结果,检查操作系统 hosts 文件或系统缓存。
  • 本地 DNS 服务器:若前两步无结果,向用户配置的本地 DNS 服务器(如运营商提供的 DNS)请求解析。
  • 根域名服务器 :本地 DNS 服务器若自身无缓存,会向根域名服务器(全球共 13 组)查询,根服务器返回顶级域名服务器(如.com服务器)的地址。
  • 顶级域名服务器 :本地 DNS 向.com服务器查询,得到example.com域名服务器的地址。
  • 权威域名服务器 :本地 DNS 向example.com的权威服务器查询,最终得到www.example.com对应的 IP 地址(如104.21.88.96)。

解析结果会被缓存(浏览器、本地 DNS 等),减少后续重复解析。

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

得到服务器 IP 地址后,浏览器需要与服务器建立TCP 连接(HTTP/HTTPS 基于 TCP 协议传输数据),通过 "三次握手" 确保连接可靠:

  • 第一次握手:浏览器(客户端)向服务器发送 "连接请求" 报文(SYN=1, seq=x)。
  • 第二次握手:服务器收到请求后,返回 "同意连接" 报文(SYN=1,ACK=1, seq=y, ack=x+1)。
  • 第三次握手:浏览器收到后,再向服务器发送 "确认连接" 报文(ACK=1, ack=y+1)。

三次握手完成后,TCP 连接建立,双方可开始传输数据。

5. (HTTPS 专属)TLS 握手:建立加密连接

若使用https协议,在 TCP 连接建立后,还需进行TLS/SSL 握手,确保数据传输加密:

  • 浏览器向服务器请求 SSL 证书(包含服务器公钥)。
  • 浏览器验证证书有效性(如是否由可信机构颁发)。
  • 浏览器生成随机对称密钥,用服务器公钥加密后发送给服务器。
  • 服务器用私钥解密得到对称密钥,双方后续用该密钥加密通信(对称加密效率更高)。
6. 浏览器发送 HTTP 请求

连接建立后,浏览器向服务器发送HTTP 请求报文,包含以下部分:

  • 请求行 :如GET /path HTTP/1.1(请求方法、资源路径、HTTP 版本)。

    • 常见请求方法:GET(获取资源)、POST(提交数据)、PUT(修改资源)、DELETE(删除资源)等。
  • 请求头 :键值对形式,包含浏览器信息、请求参数等,如:

    plaintext

    复制代码
    Host: www.example.com  # 目标服务器域名
    User-Agent: Chrome/100.0.0.0  # 浏览器类型
    Accept: text/html,application/json  # 浏览器可接受的响应格式
    Cookie: uid=123  # 客户端存储的Cookie信息
  • 请求体 :仅POST等方法需要,存放提交的数据(如表单内容、JSON 数据)。

7. 服务器处理请求并返回响应

服务器(如 Nginx、Apache、Node.js 服务器)接收 HTTP 请求后,按以下流程处理:

  • 解析请求行、请求头、请求体,确定客户端需要的资源(如/path对应的 HTML 文件)。
  • 执行业务逻辑(如查询数据库、处理数据)。
  • 生成HTTP 响应报文 ,返回给浏览器,响应包含:
    • 状态行 :如HTTP/1.1 200 OK(HTTP 版本、状态码、状态描述)。

      • 常见状态码:200(成功)、301(永久重定向)、404(资源不存在)、500(服务器错误)。
    • 响应头 :如:

      plaintext

      复制代码
      Content-Type: text/html; charset=utf-8  # 响应内容类型(HTML、JSON等)
      Content-Length: 1024  # 响应体长度
      Set-Cookie: sid=456  # 服务器向客户端设置Cookie
      Cache-Control: max-age=3600  # 缓存控制(资源有效期1小时)
    • 响应体:实际的资源内容(如 HTML 代码、CSS、JS、图片二进制数据等)。

8. 浏览器接收响应并渲染页面

浏览器接收到响应后,主要做两件事:

  • 处理响应头:如存储 Cookie、解析缓存策略(决定是否缓存资源)。
  • 渲染响应体 (若响应是 HTML 页面):
    1. 解析 HTML:生成 DOM 树(文档对象模型,描述页面结构)。
    2. 解析 CSS:生成 CSSOM 树(CSS 对象模型,描述样式规则)。
    3. 构建渲染树:结合 DOM 树和 CSSOM 树,只包含需要显示的节点和样式。
    4. 布局(Layout):计算渲染树中每个节点的位置和大小。
    5. 绘制(Paint):根据布局结果,将节点绘制到屏幕(像素级渲染)。
    6. 合成(Composite):将页面分层绘制(如文字层、图片层),最终合并为完整页面。

期间若 HTML 中包含script标签(JavaScript 代码),浏览器会暂停 HTML 解析,先执行 JS(因为 JS 可能修改 DOM/CSS),执行完成后再继续渲染。

9. 关闭 TCP 连接(四次挥手)

页面渲染完成后,若不再需要通信,TCP 连接通过 "四次挥手" 关闭:

  • 第一次挥手:浏览器发送 "断开连接" 报文(FIN=1, seq=u)。
  • 第二次挥手:服务器返回 "确认断开" 报文(ACK=1, ack=u+1),此时服务器仍可发送剩余数据。
  • 第三次挥手:服务器数据发送完毕,发送 "断开连接" 报文(FIN=1, seq=v)。
  • 第四次挥手:浏览器返回 "确认断开" 报文(ACK=1, ack=v+1),连接彻底关闭。
相关推荐
非凡ghost5 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
吃饭最爱6 小时前
html的基础知识
前端·html
我没想到原来他们都是一堆坏人6 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
前端Hardy6 小时前
HTML&CSS:有趣的漂流瓶
前端·javascript·css
前端Hardy6 小时前
HTML&CSS :惊艳 UI 必备!卡片堆叠动画
前端·javascript·css
无羡仙7 小时前
替代 Object.freeze 的精准只读模式
前端·javascript
web前端1237 小时前
Java客户端开发指南 - 与Web开发对比分析
前端
龙在天7 小时前
前端 9大 设计模式
前端
搞个锤子哟7 小时前
网站页面放大缩小带来的问题
前端