无论是浏览新闻、观看视频、在线购物,还是处理工作事务,我们几乎每天都在与网页进行交互
然而,你是否曾想过,当你点击浏览器上的一个链接时,背后究竟发生了什么?网页是如何与服务器建立连接的?本文将详细探讨这一神秘而复杂的过程,让你对网页的工作原理有更深入的了解
1. 从浏览器输入URL开始 一切始于你在浏览器地址栏中输入一个URL(统一资源定位符),比如`https://www.example.com`
这个URL包含了访问网页所需的所有信息,包括协议(https)、域名(www.example.com)以及可能的路径和查询参数
2. DNS解析:找到服务器的IP地址 浏览器无法直接与域名通信,它需要将域名转换为对应的IP地址
这个过程称为DNS(域名系统)解析
- 本地缓存:首先,浏览器会检查其本地缓存中是否已有该域名的IP地址记录
如果缓存命中,浏览器将直接使用缓存中的IP地址,跳过DNS查询过程,这可以显著提高访问速度
- DNS服务器查询:如果本地缓存中没有找到对应的IP地址,浏览器会向配置的DNS服务器发送查询请求
DNS服务器可能是一个本地ISP(互联网服务提供商)提供的,也可能是你手动设置的公共DNS服务,如Google DNS(8.8.8.8)或Cloudflare DNS(1.1.1.1)
- 递归查询:DNS服务器在收到查询请求后,会进行递归查询,依次访问根DNS服务器、顶级域(TLD)DNS服务器(如.com的DNS服务器),最后到达权威DNS服务器(即example.com的DNS服务器)
权威DNS服务器返回example.com对应的IP地址
- 返回结果:一旦找到IP地址,DNS服务器将结果返回给浏览器,浏览器将其缓存一段时间(TTL,生存时间决定),以备后续使用
3. 建立TCP连接 拿到IP地址后,浏览器需要与服务器建立通信连接
由于网页数据通常通过HTTP或HTTPS协议传输,而这两个协议都是基于TCP(传输控制协议)的,因此必须首先建立TCP连接
- 三次握手:TCP连接建立采用“三次握手”机制
首先,浏览器向服务器发送一个SYN(同步序列编号)包,请求建立连接
服务器收到SYN包后,回复一个SYN-ACK(同步-确认)包,表示同意建立连接并确认收到SYN包
最后,浏览器再发送一个ACK(确认)包,确认收到SYN-ACK包
至此,TCP连接建立完成,双方可以开始数据传输
4. TLS/SSL握手(HTTPS) 如果URL以`https://`开头,表示使用HTTPS协议,这是一种加密的HTTP协议,用于保障数据传输的安全性
因此,在传输数据之前,还需要进行TLS(传输层安全)/SSL(安全套接层)握手,以协商加密密钥
- 客户端Hello:浏览器向服务器发送一个包含支持的加密算法列表的“客户端Hello”消息
- 服务器Hello和证书:服务器选择一个双方都支持的加密算法,并向客户端发送“服务器Hello”消息及其SSL证书
证书由可信的证书颁发机构(CA)签发,用于验证服务器的身份
- 验证证书:浏览器验证服务器证书的有效性,包括检查证书是否由可信CA签发、证书是否过期、域名是否与证书中的域名匹配等
- 生成密钥:一旦证书验证通过,客户端和服务器将使用协商的加密算法生成会话密钥,用于后续数据传输的加密和解密
- 完成握手:最后,双方交换“结束握手”消息,确认加密通道已建立
5. 发送HTTP请求 一旦TCP连接(及可能的TLS加密通道)建立,浏览器就可以向服务器发送HTTP请求了
这个请求包含了请求方法(如GET、POST)、URL路径、HTTP版