从输入URL到页面展示到底发生了什么
![[Recording 20241024093426.webm]]
![[Recording 20241024093854.webm]]
- 解析URL。用户输入URL到浏览器之后,浏览器对URL进行合法性和完整性的检验,如果不合法进行只能补全,如果不完整浏览器可能采用补充前缀和后缀。如果完整生成发送给服务器的请求信息。
- 通过DNS,拿到URL对应的IP地址。先检查本地浏览器缓存和本机hosts文件中是否有URL对应的IP地址。如果没有向本地DNS服务器发送DNS请求,查找本地DNS服务器缓存中是否有对应的IP地址,如果没有向根域名服务器发送DNS请求,根域名服务器给本地DNS服务器发送一个顶级域名服务器的地址,本地DNS服务器向顶级DNS服务器发送请求,顶级域名服务器发送权威域名的地址,本地拿着这个地址向权威域名服务器拿到IP地址。
- 建立TCP连接。在发送HTTP请求之前,客户端拿出一个随机端口和服务器的80端口建立TCP连接,也就是TCP三次挥手。如果是HTTPS协议,就会向服务器的443端口建立tcp3次挥手之后,建立tls的4次挥手
- 发送HTTP请求,客户端向服务器端发送HTTP请求报文
- 拿到HTTP响应。服务器向客户端发送HTTP响应报文。
- 解析HTTP响应,渲染HTML,CSS和其他资源。客户端拿到HTTP响应报文,先看响应头是不是3XX,如果是301,302会重定向到新的url。如果是304直接从浏览器中拿到缓存资源。拿到响应资源后,会解析HTML和CSS构建dom,渲染整个WEB页面
- 断开TCP连接。现在http协议会建立客户端与服务器的持久连接,只有服务器和客户端主动关闭tcp连接,才会断开tcp连接,即tcp的4次挥手
DNS查询过程
当用户在浏览器中输入一段URL,如果浏览器想根据该URL和服务器进行数据的传输,首先需要根据DNS协议对该URL进行解析,解析成IP地址,浏览器才能够向服务器发送请求。
URL是人类能够识别的超链接,然而计算机进行通讯时需要依赖IP地址,因此就有了DNS查询
整个查询步骤:
- 首先浏览器会根据自身的浏览器缓存和本地的HOSTS缓存查询是否有该url对应的ip地址
- 如果没有会向本地DNS服务器的缓存查询,本地DNS服务器也就是一些ISP,如中国电信等,如果本地DNS服务器已经有了该url的对应记录,就会直接返回对应的ip地址
- 如果本地域名服务器也没有对应的ip地址,本地域名服务器就会像根DNS服务器发送查询请求,根域名服务器会返回顶级域名服务器的地址比如.com, .cn, .org等,也就是一段url的最后.后面的服务器地址
- 本地域名服务器拿到顶级域名服务器地址后,就会向顶级域名服务器发送请求。比如
www.example.com
的url就会像.com
顶级域名服务器查找example.com
的ip地址请求,也就是权威域名服务器,权威域名服务器就会将对应的ip地址返回给本地DNS服务器 - 本地域名服务器拿到对应的ip地址后,会先将该url对应的ip地址缓存起来,然后返回给客户端
- 客户端就会向该ip地址建立连接获取内容
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Priska's blog!