上一篇
http访问网站过程
- 行业动态
- 2025-04-30
- 2015
用户输入网址后,浏览器先通过DNS解析域名获取IP地址,再与服务器建立TCP连接,发送HTTP请求,服务器处理后返回响应数据,浏览器渲染
HTTP访问网站详细过程
用户输入URL
- 操作:用户在浏览器地址栏输入网址(如
https://www.example.com/page
)。 - 解析:浏览器解析URL,提取协议(
http/https
)、主机名(www.example.com
)、端口(默认80/443)和路径(/page
)。
DNS域名解析
- 目的:将域名转换为服务器IP地址。
- 流程:
- 本地缓存检查:浏览器或操作系统缓存中查找是否已解析过该域名。
- 递归查询(若未缓存):
- 向本地DNS服务器(如ISP提供的DNS)发起查询。
- 本地DNS服务器逐级查询根DNS服务器→顶级域名服务器(如
.com
)→权威DNS服务器(如example.com
的DNS),最终返回IP地址。
- 结果返回:浏览器获得目标服务器的公网IP(如
0.2.1
)。
建立TCP连接
- 目的:与服务器建立可靠的传输通道。
- 流程(三次握手):
- 客户端发送SYN:浏览器向服务器IP的指定端口(如80/443)发送SYN报文,并携带初始序列号。
- 服务器响应SYN-ACK:服务器回复SYN-ACK报文,确认收到并携带自己的序列号。
- 客户端发送ACK:浏览器发送ACK报文,确认连接建立。
- 结果:TCP连接成功建立,开始传输数据。
发送HTTP请求
- 请求结构:
GET /page HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 ... Accept: text/html, ...
- 关键步骤:
- 浏览器通过TCP连接发送HTTP请求报文,包含方法(GET/POST)、路径、协议版本、请求头(如
Host
、User-Agent
)和可选的请求体(如POST数据)。
- 浏览器通过TCP连接发送HTTP请求报文,包含方法(GET/POST)、路径、协议版本、请求头(如
服务器处理请求
- 流程:
- Web服务器接收请求(如Nginx/Apache):
解析请求路径,定位静态资源(如HTML文件)或动态资源(如PHP脚本)。
- 处理(若需要):
调用应用服务器(如Node.js、Python Flask)生成动态内容。
- 响应生成:
- 服务器封装HTTP响应报文,包含状态码(如
200 OK
)、响应头(如Content-Type
)和响应体(如HTML页面)。
- 服务器封装HTTP响应报文,包含状态码(如
- Web服务器接收请求(如Nginx/Apache):
服务器返回响应
响应结构:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024 <html>...</html>
关键步骤:
服务器通过TCP连接返回响应报文,浏览器开始接收数据。
浏览器渲染页面
- 流程:
- 解析HTML:浏览器解析HTML结构,构建DOM树。
- 加载资源:并行下载CSS、JS、图片等资源(可能触发额外HTTP请求)。
- 执行JS:执行
<script>
标签中的JavaScript代码。 - 样式应用:应用CSS样式,布局页面。
- 页面渲染:将最终页面显示给用户。
断开TCP连接
- HTTP/1.1默认行为:连接保持(复用)以减少延迟。
- 显式关闭(若
Connection: close
):- 客户端发送FIN报文,终止连接。
- 服务器回复ACK,释放连接。
关键步骤与协议对照表
步骤 | 涉及协议 | 主要组件 | 作用 |
---|---|---|---|
域名解析 | DNS | 本地DNS服务器、权威DNS | 将域名转换为IP地址 |
建立TCP连接 | TCP三次握手 | 客户端、服务器 | 可靠传输通道 |
发送HTTP请求 | HTTP/1.1 | 浏览器、Web服务器 | 请求资源 |
服务器处理与响应 | HTTP/1.1、动态语言 | Web服务器、应用服务器 | 生成动态内容或静态资源 |
浏览器渲染与资源加载 | HTML/CSS/JavaScript | 浏览器、渲染引擎 | 页面展示与交互 |
相关问题与解答
问题1:HTTP和HTTPS的主要区别是什么?
- 解答:
- 传输层:HTTPS在HTTP基础上增加TLS/SSL加密,确保数据在传输过程中不被窃听或改动。
- 端口:HTTP默认端口80,HTTPS默认端口443。
- 证书:HTTPS需要服务器部署数字证书(由CA颁发),浏览器验证证书合法性。
- 安全性:HTTPS防止中间人攻击,适合敏感信息传输(如登录、支付)。
问题2:为什么TCP连接需要三次握手?
- 解答:
- 同步双方状态:三次握手确保客户端和服务器均具备接收和发送数据的能力。
- 防止历史连接干扰:避免客户端误用已失效的连接(如旧的重复ACK报文)。
- 协商初始序列号:双方交换初始序列号,确保数据包按序