本文参考:
https://www.bilibili.com/video/BV1QG4y1Y7vj?vd_source=77bab8f46de2b84d605769e73f8f90c4
小林coding(2.2 键入网址到网页显示,期间发生了什么? | 小林coding)
仅用于自用整理复习
从URL输入到页面展示之间主要分以下几个步骤
- URL输入
- DNS解析
- 建立TCP连接
- 发送http/https连接请求
- 服务器端响应请求
- 浏览器解析渲染链接
- 断开TCP连接
- URL输入
URL,全称统一资源定位符,用于定位互联网上的资源,俗称网址。
在地址栏输入URL后点击回车,浏览器会对输入的信息进行判断。第一步检查输入的内容是否是一个合法的URL链接。如果不合法,则将输入内容作为搜索条件,使用用户默认的搜索引擎来进行搜索。大部分的浏览器会在历史记录,书签等地开始查找我们输入的内容,并给出智能提示。第二步判断输入的URL是否完整。如果不完整,那么浏览器可能会对地址进行猜测,补全地址的前缀和后缀。
- DNS解析
由于浏览器不能直接通过域名找到对应的服务器所在的IP地址,所以需要进行DNS解析,找到对应的IP地址进行访问。DNS是通过以下步骤来解析域名的:
首先用户在浏览器中输入域名,操作系统会检查缓存和本地的hosts文件中是否存在这个网址记录,如果有,就从记录中找到对应的IP地址完成域名的解析。如果不存在则使用TCP/IP参数中设置的DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果完成域名解析。如果还是没有的话,继续检查本地的DNS服务器中是否缓存有该网络记录,如果有返回解析结果完成域名解析。如果还是没有,本地DNS服务器则会发送查询报文到根DNS服务器,根DNS服务器收到请求后返回顶级域DNS服务器地址,然后本地DNS服务器再发送查询报文到顶级域DNS服务器,顶级域DNS收到请求后返回权威DNS服务器的地址,然后本地DNS服务器再发送查询报文到权威DNS服务器,权威DNS服务器收到请求后返回最终的IP地址,完成域名解析。
- 建立TCP连接
当浏览器获取到服务器的IP地址后,浏览器会用一个随机的端口号向服务器80/443端口(http端口号为80,https端口为443)发起TCP连接请求,连接请求到达服务器端后,通过TCP三次握手建立TCP连接。
- 发送http请求
建立连接后就可以通过http/https进行数据的传输了,若使用了https,会在TCP和http之间多增加一层协议作为加密和认证的服务。https使用SSL和TLS协议,保证了信息的安全,SSL协议的作用是认证客户端和服务器,确保数据发送到正确的客户端和服务器,加密数据防止数据被窃取,维护数据的完整性,确保数据在传输过程中不被改变。TLS协议的作用是用于两个通信应用程序之间提供数据保密性和数据完整性。TLS协议有两层,组成TLS记录协议和TLS握手协议
- 服务端响应请求
当浏览器到Web服务器的连接建立后,浏览器会发送一个初始的HTTP GET请求,请求目标通常是HTML文件,服务器收到请求后,将发回一个HTTP响应报文,内容包括相关的响应头和HTML正文
- 浏览器解析渲染界面
不同的浏览器渲染过程是不一样的,这里以谷歌浏览器(chrome)举例,第一步处理HTML标记并构建DOM树。第二步处理CSS标记并构建CSSOM树。第三步,将DOM树以CSSOM树合并为渲染树。第四步,根据渲染树来布局以计算每个节点的几何信息。第五步,将各个节点渲染到屏幕上,这样就完成了页面的渲染。
- TCP断开连接
现在的浏览器界面为了优化请求的耗时默认都会打开持久连接,也就是标签页关闭时,TCP连接才会关闭,这个关闭的过程就是TCP四次挥手