从输入网址到最后浏览器呈现页面内容的流程分析
从输入URL到页面呈现是一个复杂的多步骤过程,涉及网络协议、服务器交互、渲染引擎等多个技术环节。以下是详细的技术流程分析:
URL解析与处理
- 浏览器解析URL结构(协议+域名+端口+路径+参数)
- 检查HSTS预加载列表(强制HTTPS)
- 处理特殊字符(如空格转义为%20)
- 非完整URL时补全协议/路径(自动添加http://或https://)
DNS解析(递归查询)
- 浏览器缓存检查(chrome://net-internals/#dns)
- 本地hosts文件查询
- 向配置的DNS服务器发起请求(UDP 53端口)
- 可能的查询路径:根域名服务器→TLD服务器→权威域名服务器
- 获得A记录(IPv4)或AAAA记录(IPv6)
TCP连接建立
- 经典三次握手过程:
- SYN=1, seq=x
- SYN=1, ACK=1, seq=y, ack=x+1
- ACK=1, seq=x+1, ack=y+1
- 启用TFO(TCP Fast Open)时可减少RTT
- HTTPS场景下需要额外TLS握手(1-2个RTT)
TLS协商(HTTPS)
- ClientHello(支持的加密套件+随机数)
- ServerHello(选定加密套件+随机数+证书)
- 证书链验证(OCSP/CRL检查)
- 密钥交换(ECDHE/RSA等)
- 生成会话密钥(Pre-master secret → master secret → session key)
HTTP请求处理
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml
User-Agent: Mozilla/5.0
- 添加Cookie、缓存相关头部(If-Modified-Since等)
- 启用HTTP/2时进行二进制分帧
服务器处理
- 负载均衡器路由(LVS/Nginx)
- 反向代理处理(缓存检查、重写规则)
- 应用服务器处理(PHP/Java/Python等)
- 可能涉及:
- 数据库查询(连接池优化)
- 缓存查询(Redis/Memcached)
- 静态文件CDN回源
响应返回
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=3600
ETag: "xyz123"
Content-Encoding: gzip
- 错误处理(3xx重定向/4xx客户端错误/5xx服务端错误)
浏览器渲染关键路径