![[Recording 20241024093426.webm]]

![[Recording 20241024093854.webm]]

  1. 解析URL。用户输入URL到浏览器之后,浏览器对URL进行合法性和完整性的检验,如果不合法进行只能补全,如果不完整浏览器可能采用补充前缀和后缀。如果完整生成发送给服务器的请求信息。
  2. 通过DNS,拿到URL对应的IP地址。先检查本地浏览器缓存和本机hosts文件中是否有URL对应的IP地址。如果没有向本地DNS服务器发送DNS请求,查找本地DNS服务器缓存中是否有对应的IP地址,如果没有向根域名服务器发送DNS请求,根域名服务器给本地DNS服务器发送一个顶级域名服务器的地址,本地DNS服务器向顶级DNS服务器发送请求,顶级域名服务器发送权威域名的地址,本地拿着这个地址向权威域名服务器拿到IP地址。
  3. 建立TCP连接。在发送HTTP请求之前,客户端拿出一个随机端口和服务器的80端口建立TCP连接,也就是TCP三次挥手。如果是HTTPS协议,就会向服务器的443端口建立tcp3次挥手之后,建立tls的4次挥手
  4. 发送HTTP请求,客户端向服务器端发送HTTP请求报文
  5. 拿到HTTP响应。服务器向客户端发送HTTP响应报文。
  6. 解析HTTP响应,渲染HTML,CSS和其他资源。客户端拿到HTTP响应报文,先看响应头是不是3XX,如果是301,302会重定向到新的url。如果是304直接从浏览器中拿到缓存资源。拿到响应资源后,会解析HTML和CSS构建dom,渲染整个WEB页面
  7. 断开TCP连接。现在http协议会建立客户端与服务器的持久连接,只有服务器和客户端主动关闭tcp连接,才会断开tcp连接,即tcp的4次挥手

DNS查询过程

当用户在浏览器中输入一段URL,如果浏览器想根据该URL和服务器进行数据的传输,首先需要根据DNS协议对该URL进行解析,解析成IP地址,浏览器才能够向服务器发送请求。
URL是人类能够识别的超链接,然而计算机进行通讯时需要依赖IP地址,因此就有了DNS查询
整个查询步骤:

  1. 首先浏览器会根据自身的浏览器缓存和本地的HOSTS缓存查询是否有该url对应的ip地址
  2. 如果没有会向本地DNS服务器的缓存查询,本地DNS服务器也就是一些ISP,如中国电信等,如果本地DNS服务器已经有了该url的对应记录,就会直接返回对应的ip地址
  3. 如果本地域名服务器也没有对应的ip地址,本地域名服务器就会像根DNS服务器发送查询请求,根域名服务器会返回顶级域名服务器的地址比如.com, .cn, .org等,也就是一段url的最后.后面的服务器地址
  4. 本地域名服务器拿到顶级域名服务器地址后,就会向顶级域名服务器发送请求。比如www.example.com的url就会像.com顶级域名服务器查找example.com的ip地址请求,也就是权威域名服务器,权威域名服务器就会将对应的ip地址返回给本地DNS服务器
  5. 本地域名服务器拿到对应的ip地址后,会先将该url对应的ip地址缓存起来,然后返回给客户端
  6. 客户端就会向该ip地址建立连接获取内容