目录
1. 解析URL
-
浏览器解析URL,提取协议(如
http
/https
)、域名、端口(默认80或443)、路径和查询参数。
2. DNS解析
-
浏览器通过DNS(域名系统)将域名转换为IP地址:
-
检查浏览器缓存。
-
检查操作系统缓存(如
/etc/hosts
)。 -
向本地DNS服务器查询。
-
如果本地DNS服务器没有记录,会递归查询根DNS服务器、顶级域服务器(如
.com
)和权威DNS服务器。
-
3. 建立TCP连接
-
浏览器通过IP地址和端口与服务器建立TCP连接:
-
三次握手:
-
客户端发送
SYN
包。 -
服务器回复
SYN-ACK
包。 -
客户端发送
ACK
包,连接建立。
-
-
如果是HTTPS,还会进行TLS握手,协商加密密钥。
-
4. 发送HTTP请求,进行网络传输
-
浏览器发送HTTP请求报文,包含:
-
请求方法(如
GET
、POST
)。 -
请求头(如
User-Agent
、Accept
)。 -
请求体(如POST请求的数据)。
-
-
4.1. 安全协商(HTTPS)
-
TLS 握手:交换密钥、验证证书(涉及 CA 链校验、OCSP 吊销检查)。
会话恢复:若之前有 Session ID 或 Session Ticket,可跳过完整握手。
4.2. 处理重定向
-
自动跳转:若服务器返回 301/302,浏览器会重新开始整个流程处理新 URL,而不是立即发送原始请求。
重定向链限制:浏览器会限制最大重定向次数(如 Chrome 限制 20 次)。
5. 服务器处理请求
-
服务器接收请求后:
-
根据路径和参数处理请求。
-
可能查询数据库或调用其他服务。
-
生成HTTP响应,包括状态码(如
200 OK
)、响应头和响应体(如HTML内容)。
-
6. 接收HTTP响应
-
浏览器接收服务器的响应:
-
解析状态码,判断请求是否成功。
-
读取响应头(如
Content-Type
)。 -
下载响应体(如HTML、CSS、JS文件)。
-
-
断开tcp连接
连接断开发生在HTTP请求-响应完成后,具体取决于HTTP协议版本和连接管理方式。以下是详细说明:
1. HTTP/1.0
-
默认行为:每次请求完成后,连接立即断开。
-
过程:
-
客户端发送HTTP请求。
-
服务器返回HTTP响应。
-
服务器主动关闭TCP连接。
-
-
特点:每次请求都需要重新建立连接,性能较差。
2. HTTP/1.1
-
默认行为:支持持久连接(Keep-Alive),连接在多次请求后才会断开。
-
过程:
-
客户端发送HTTP请求,请求头中包含
Connection: keep-alive
。 -
服务器返回HTTP响应,响应头中也包含
Connection: keep-alive
。 -
连接保持打开,客户端可以继续发送其他请求。
-
当满足以下条件时,连接断开:
-
客户端或服务器显式关闭连接(如发送
Connection: close
)。 -
连接空闲超时(由服务器或客户端配置)。
-
达到最大请求数限制(由服务器配置)。
-
-
-
特点:减少了连接建立的开销,提高了性能。
3. HTTP/2
-
默认行为:复用同一个TCP连接,支持多路复用(多个请求和响应可以同时在一个连接上传输)。
-
过程:
-
客户端与服务器建立一个TCP连接。
-
客户端通过该连接发送多个HTTP请求。
-
服务器通过同一连接返回多个HTTP响应。
-
连接断开条件:
-
客户端或服务器显式关闭连接。
-
连接空闲超时。
-
-
-
特点:进一步优化了性能,减少了连接管理的开销。
4. WebSocket
-
如果使用的是WebSocket协议(基于HTTP升级),连接不会在请求-响应后断开,而是保持长连接,支持双向通信。
-
断开条件:
-
客户端或服务器主动关闭连接。
-
网络故障或超时。
-
5. 连接断开的具体时机
-
客户端主动断开:
-
用户关闭浏览器或标签页。
-
页面跳转到其他URL。
-
-
服务器主动断开:
-
服务器配置了连接超时时间。
-
服务器资源不足,主动关闭空闲连接。
-
-
网络原因断开:
-
网络不稳定或中断。
-
防火墙或代理服务器强制关闭连接。
-
总结
连接断开的时机取决于HTTP协议版本和连接管理方式:
-
HTTP/1.0:每次请求后立即断开。
-
HTTP/1.1:在多次请求后或满足条件时断开。
-
HTTP/2:在连接空闲或显式关闭时断开。
-
WebSocket:保持长连接,直到主动关闭或网络故障。
连接断开通常发生在请求-响应完成后,具体由客户端、服务器或网络条件决定。
7. 渲染页面
-
浏览器解析并渲染页面:
-
解析HTML:构建DOM树。
-
解析CSS:构建CSSOM树。
-
合并DOM和CSSOM:生成渲染树。
-
布局(Layout):计算元素的位置和大小。
-
绘制(Paint):将页面绘制到屏幕上。
-
执行JavaScript:如果页面包含JS,浏览器会解析并执行。
-
8. 加载其他资源
-
如果HTML中包含外部资源(如图片、CSS、JS),浏览器会重复上述过程,发送额外的HTTP请求来获取这些资源。
9. 页面交互
-
页面加载完成后,用户可以与页面交互(如点击按钮、输入表单)。
-
浏览器会根据用户操作触发事件(如点击事件)并执行相应的JavaScript代码。
- 断开TCP连接:
- 当所有资源都被加载和渲染完毕后,浏览器会关闭与服务器的TCP连接。
- 如果是持久连接(HTTP Keep-Alive),TCP连接可能会被保持以便重用于后续请求。
总结
输入URL后,浏览器会依次执行以下步骤:
-
解析URL。
-
DNS解析。
-
建立TCP连接(及TLS握手)。
-
发送HTTP请求。
-
服务器处理请求并返回响应。
-
浏览器解析响应并渲染页面。
-
加载其他资源。
-
页面交互。
这个过程涉及网络协议(如DNS、TCP、HTTP)、浏览器渲染引擎和JavaScript引擎的协作。