Skip to main content

输入url到页面展示全过程

SewenJanuary 22, 2024About 72 min网络输入url到页面展示全过程

输入url到页面展示全过程

总流程

从浏览器输入URL到页面展示的过程包括 URL解析、检查浏览器缓存、DNS解析、建立TCP连接、发送HTTP请求、服务器处理请求、接收响应、下载资源、页面渲染和执行JavaScript等步骤。这些步骤涉及到网络通信、服务器处理、资源下载和页面渲染等过程,最终将页面呈现给用户。

当你在浏览器输入URL后发生了什么

整个过程中涉及过程有:

URL 解析

URL 解析发生在浏览器中, 解析输入浏览器地址栏中的 url 过程.

总体流程

解析 URL

查找 HTTP 缓存

浏览器首先检查是否有与该URL相关的缓存。它会查找内存缓存(Memory Cache)和磁盘缓存(Disk Cache)。

  1. 内存缓存(Memory Cache)检查:浏览器会首先检查内存缓存,即浏览器在当前会话期间缓存的资源。如果在内存缓存中找到匹配的资源,并且未过期(根据缓存的过期策略),浏览器将直接使用内存缓存中的资源。
  2. 磁盘缓存(Disk Cache)检查:如果在内存缓存中没有找到匹配的资源,浏览器会继续检查磁盘缓存,即之前访问过的资源缓存到硬盘上的地方。如果在磁盘缓存中找到匹配的资源,并且未过期,浏览器将从磁盘缓存中加载资源。

强制缓存和协商缓存详细流程参考我的博客:前端发版静态资源404问题 | Sewen 博客 (sewar-x.github.io)

网络分层传输

在进行页面的网络加载过程,就是网络是通信过程,其中包括通信对象和通信协议。

准备 HTTP 报文

HTTP 协议

请求报文内容

URI 和 URL

MIME 类型

请求方法

常见问题:

get 请求传参长度的误区?

get 和 post 区别?

get 和 post 请求在缓存方面的区别?

协议版本

常见问题

http1.1 和 http1.0 之间有哪些区别?

http1.1 相对于 http1.0 有这样几个区别:

二进制分帧(使用 HTTP2 )

DNS 域名解析

image-20240119145625345

常见问题

域名带 www 与不带 www 的区别?

带www与不带www对网站优化 和 收录 有什么影响?

ARP 地址解析

ARP 目的:获得ip地址后进行ip地址解析(ARP), 获得硬件地址。

三次握手建立TCP连接

三次握手过程

常见 问题

SYN 是需要消耗一个序列号的,下次发送对应的 ACK 序列号要加1,为什么?

为什么是三次握手不是两次?

ARQ协议

等待ARQ协议

image-20210706194826007

连续ARQ 协议
滑动窗口协议

TCP 协议

TCP 可靠传输机制

TCP 拥塞控制机制

慢开始
拥塞避免
快速重传
快速恢复

TCP 拥塞控制示例

image-20210707000416303

TCP 拥塞控制流程图

常见问题

增加资源能解决拥塞吗?

拥塞控制与流量控制的区别 ?

TCP 流量控制机制

TLS 协商 (使用HTTPS)

TLS 协商过程

HTTPS 协议

SSL 和 TLS
混合加密

image-20210707130707141

对称加密

非对称加密

摘要算法

img

数字证书

传输层:封装成报文段

image.png

网络层:封装成数据报

数据链路层:封装成帧

物理层: 数字转换为电信号

image.png

服务器处理

代理服务器处理

代理服务器

image.png

CDN 内容分发

使用 CDN 与未使用 CDN 过程:

当用户访问一个网站时,如果没有 CDN,过程:

  1. 浏览器要将域名解析为 IP 地址,所以需要向本地 DNS 发出请求。

  2. 本地 DNS 依次向根服务器、顶级域名服务器、权限服务器发出请求,得到网站服务器的 IP 地址。

  3. 本地 DNS 将 IP 地址发回给浏览器,浏览器向网站服务器 IP 地址发出请求并得到资源。

    img

如果用户访问的网站部署了 CDN,过程:

1. 浏览器要将域名解析为 IP 地址,所以需要向本地 DNS 发出请求。
  1. 本地 DNS 依次向根服务器、顶级域名服务器、权限服务器发出请求,得到全局负载均衡系统(GSLB)的 IP 地址。 3. 本地 DNS 再向 GSLB 发出请求,GSLB 的主要功能是根据本地 DNS 的 IP 地址判断用户的位置,筛选出距离用户较近的本地负载均衡系统(SLB),并将该 SLB 的 IP 地址作为结果返回给本地 DNS。 4. 本地 DNS 将 SLB 的 IP 地址发回给浏览器,浏览器向 SLB 发出请求。 5. SLB 根据浏览器请求的资源和地址,选出最优的缓存服务器发回给浏览器。 6. 浏览器再根据 SLB 发回的地址重定向到缓存服务器。 7. 如果缓存服务器有浏览器需要的资源,就将资源发回给浏览器。如果没有,就向源服务器请求资源,再发给浏览器并缓存在本地。

img

参考资料:

负载均衡器

源服务器处理

拆包和组装

处理请求

浏览器接受响应

状态码含义常见状态码
1xx信息提示:接收的请求正在处理101:Switching Protocals 服务器正在根据客户端的制定,将协议切换成 Update 首部所列的协议。可查阅 协议升级机制
2xx成功:请求正常处理完毕200:OK 请求成功,消息主体包含了所请求的资源
3xx重定向:需要进一步操作以完成请求301:Moved Permanently 永久重定向 302:Found 临时重定向(HTTP 1.0) 304:Not Modified 请求资源未修改,服务端不用返回资源,客户端可以使用本地资源 307:Temporary Redirect 临时重定向(HTTP 1.1) Chrome 用于内部重定向
4xx客户端错误401:Unanthorized 未授权 404:Not Found 服务器无法找到所请求 URL 对应的资源
5xx服务器错误500: Internal Server Error 服务端内部错误 502: Bad Gateway 代理网关错误

检测响应体

HTTP 响应报文

Header解释示例
Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求Accept-Ranges: bytes
Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)Age: 12
Allow对某网络资源的有效的请求行为,不允许则返回405Allow: GET, HEAD
Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型Cache-Control: no-cache
Content-Encodingweb服务器支持的返回内容压缩编码类型。Content-Encoding: gzip
Content-Language响应体的语言Content-Language: en,zh
Content-Length响应体的长度Content-Length: 348
Content-Location请求资源可替代的备用的另一地址Content-Location: /index.htm
Content-MD5返回资源的MD5校验值Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range在整个返回体中本部分的字节位置Content-Range: bytes 21010-47021/47022
Content-Type返回内容的MIME类型Content-Type: text/html; charset=utf-8
Date原始服务器消息发出的时间Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag请求变量的实体标签的当前值ETag: “737060cd8c284d8af7ad3082f209582d”
Expires响应过期的日期和时间Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified请求资源的最后修改时间Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location用来重定向接收方到非请求URL的位置来完成请求或标识新的资源Location: http://www.zcmhi.com/archives/94.html
Pragma包括实现特定的指令,它可应用到响应链上的任何接收方Pragma: no-cache
Proxy-Authenticate它指出认证方案和可应用到代理的该URL上的参数Proxy-Authenticate: Basic
refresh应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)Refresh: 5; url=http://www.zcmhi.com/archives/94.html
Retry-After如果实体暂时不可取,通知客户端在指定时间之后再次尝试Retry-After: 120
Serverweb服务器软件名称Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie设置Http CookieSet-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer指出头域在分块传输编码的尾部存在Trailer: Max-Forwards
Transfer-Encoding文件传输编码Transfer-Encoding:chunked
Vary告诉下游代理是使用缓存响应还是从原始服务器请求Vary: *
Via告知代理客户端响应是通过哪里发送的Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning警告实体可能存在的问题Warning: 199 Miscellaneous warning
WWW-Authenticate表明客户端请求实体应该使用的授权方案WWW-Authenticate: Basic

HTTP重定向

参考资料:HTTP 重定向

缓存更新

缓存更新:如果服务器响应中包含缓存相关的HTTP响应头(如Cache-Control、ETag等),浏览器会根据这些响应头更新缓存。它可能会将响应缓存到内存缓存或磁盘缓存中,以便将来使用。

断开TCP连接

四次挥手过程:

因为 TCP 连接是全双工的,也就是说通信的双方都可以向对方发送和接收消息, 所以断开连接需要双方的确认。

TCP 使用四次挥手的原因:

浏览器解析

建立DOM树

建立 CSSDOM

JavaScript 代码执行

JavaScript代码的整个执行过程,分为两个阶段:

构建辅助功能树

浏览器渲染

合成 render 树

布局 Layout

绘制 Paint

合成 Compositing

重排/回流

重绘

参考资料

前端性能优化指南

用户交互

关键渲染路径