在本文中,我将简单阐述一下“从输入 URL 到页面加载完成的整个过程”。作为互联网从业者,不管你属于何种职位,都应该有所了解。
操作的过程很简单:打开浏览器,在地址栏中键盘输入,回车,浏览网页…. 地址栏输入 当你按输入,浏览器接收到这个消息之后,会触发自动完成机制。浏览器根据自己的算法识别出你要访问的URL。 按下回车键 此时,回车键的电流回路通过电容器间接地闭合,使得少量的电流进入了键盘的主逻辑电路系统中。逻辑电路系统会扫描每个按键的状态,对于按键开关的电位弹跳变化进行解析,并将其转化为键盘码值。键盘控制器在得到码值之后,将进行编码。编码后,键码值将储存在寄存器内。键盘的USB控制器会查询到这个键码值,然后将键码值转换为一个数据包。之后,此数据包将通过键盘传递给计算机,计算机把数据包进行解码。最后,解码后的按键码值传输到操作系统的硬件层。 解析URL 浏览器通过URL可以知道将要使用HTTP协议,和请求资源的主页。 浏览器会将地址栏中输入的文字传给默认的搜索引擎。把文字传递给搜索引擎的时候,URL会带有特定的一串字符,用来告诉搜索引擎这次搜索来自某个浏览器。 Unicode(规范字符集)编码转换。如果有非ASCII的字符,将其进行Unicode编码转换。 检查HSTS列表 浏览器检查自带的“HSTS(HTTP严格传输安全)”列表,这个列表里包含了那些只使用HTTPS进行连接的网站。 DNS查询与解析 浏览器检查域名是否在缓存当中。 如果缓存中没有,就调用库函数进行查询。库函数在进行DNS解析之前,检查域名是否在本地 Hosts 里。 如果域名在缓存和Hosts中都没有,库函数会向 DNS 服务器发送一条 DNS 查询请求。 查询本地的DNS服务器。 首先查询地址解析协议(ARP)的缓存,如果缓存命中,则返回结果:目标 IP = MAC地址。如果缓存没有命中,就看看目标 IP 地址是不是在本地路由表中的某个子网内,并使用相关接口。然后查询选择的网络接口的MAC地址。 发送ARP请求,路由器或其他硬件会返回结果(结果中包含默认网关的IP地址)。 通过TCP/UDP协议向DNS服务器发送相应请求。如果本地DNS服务器没有找到结果,将会逐层查询,直到结果(目标服务器的IP地址)返回。 使用套接字 浏览器得到了目标服务器的 IP 地址,以及 URL 中给出来端口号(http默认端口号是80端口)后,浏览器调用库函数socket。这个请求将被封装,目标端口会被加入头部。在网络层会再加入一个IP头部,里面包含了目标服务器的IP地址以及本机的IP地址。接下来继续封装,将本地内置网卡的MAC地址和本地路由器的MAC地址封装进去。此时封装包已经准备就绪。 接下来,封装包会从本地计算机出发,经过本地网络,再通过调制解调器把数字信号转换成模拟信号。在传输线路的另一端,另一个调制解调器把模拟信号转换回数字信号,交由下一网络节点进行处理。最终封包会到达目标服务器。 发送和接收的过程在TCP连接期间会发送很多次(三次握手):客户端将封包发送给服务端,并建立连接设置初始的序列号;服务端收到封包后做相应处理,并且向客户端表明自己接受到了第一个封包;客户端再次发送一个封包来确认这次连接。这就是建立连接三次握手的过程。 TLS握手 客户端发送相应消息给服务端,表明可用的加密算法以及压缩算法。 服务端返回给客户端一个消息,包含了TLS版本,以及自己使用的加密算法和压缩算法等。 客户端验证服务端发送的信息是否可用,如果可用,就生成一段加密的随机数返给服务端。 服务端对这段密文进行解密,并生成自己的主密钥。 接下来整个会话会进行加密,传输http的内容。 HTTP协议 浏览器向服务器发送请求头,请求头内容包括:请求数据方式,http版本号,域名等头部信息。接下来,服务器端返回一个响应码,表明这次请求的状态。浏览器会从自己的缓存中取出想要的内容,在解析完 HTML 之后,浏览器会重复上面的过程,直到HTML页面引入的所有资源(图片,CSS,JS等等)全部都获取完毕。 浏览器 当服务器提供了资源之后(HTML,CSS,JS,图片等),浏览器会执行下面的操作: HTML解析。HTML解析器的主要工作是对HTML文档进行解析,解析出HTML的内容。 CSS解析。分析CSS文件内容以及属性值,将每个CSS文件都被解析成一个样式表对象。 页面渲染。通过一些列计算并呈现DOM树,过程就是测量-排版-绘制页面。在渲染过程中,对图形的渲染处理会使用图形处理器GPU。 后期渲染 (责任编辑:admin) |