【详解】面试官问——浏览器从接收到一个url到渲染显示页面经历了什么

【详解】面试官问——浏览器从接收到一个url到渲染显示页面经历了什么

1、在浏览器地址行中输入URL域名
2、进行DNS域名解析,获取域名对应的IP地址
  1. 浏览器先检查自身缓存中是否有该域名的网址映射关系。若有则调用该IP地址映射关系,完成域名解析;若无则进行下一步。
  2. 操作系统检查本地hosts文件中是否有该域名的网址映射关系。若有则调用并完成域名解析;若无则进行下一步。
  3. 查找本地DNS解析器缓存。若有该域名的网址映射关系则调用并完成域名解析;若无则进行下一步。
  4. 请求本地域名服务器(本地DNS)解析该域名,查找该域名的网址映射关系,若有则调用并完成域名解析;若无则进行下一步
  5. 请求根DNS解析该域名,根DNS返回本地DNS一个IP地址,这个IP地址是负责该域名的国际顶级域名(如.com .org)所在的服务器地址。
  6. 本地DNS收到IP地址之后,会联系该服务器对域名进行解析。若解析成功则返回;若不能则返回下一级DNS的IP地址(如.qq.com csdn.net),不断重复第6步直至找到域名对应的IP地址。
3、浏览器向服务器发起TCP连接

即三次握手。简单理解为,浏览器向服务器发起TCP连接请求,服务器返回TCP连接的确认请求,浏览器向服务器发送确认TCP连接请求的确认。(是不是有点拗口)具体情况如下:

  1. 第一次握手:浏览器将数据包的标志位SYN设为1,并随机产生一个seq=J,将数据包发送给服务器,进入SYN_SENT状态。
  2. 第二次握手:服务器收到数据包,将数据包的标志位ACK和SYN都设为1,并将ack=J+1,随机产生一个seq=k,发送给浏览器,进入SYN_RCVD状态。
  3. 第三次握手:浏览器收到数据包,确认ack等于J+1,标志位ACK等于1。若正确则将标志位ACK=1,ack=k+1的数据包发给服务器。服务器确认标志位ACK等于1,ack等于k+1,则建立连接。
4、浏览器向服务器发起Http请求

Http请求即构建请求报文,并通过TCP协议发送到服务器指定端口。请求报文分为四个部分:请求行+请求头+空行+请求体。

  • 请求行:请求方法(GET、POST、DELETE、HEAD、OPTIONS、PUT、TRACE)+ URL地址 + 协议名称及版本号。如GET /data/info.html HTTP/1.1便是一个完整的请求行。
  • 请求头:常见的请求头如在这里插入图片描述
  • 空行。
  • 请求体:即请求数据。比如使用POST方法提交一个表单,其中有user字段为"admin",password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
5、服务器处理收到的请求报文

服务器端收到请求后,由web服务器(准确来说应该是HTTP服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了要调度哪些资源文件,再通过相应的这些文件处理用户请求和参数,并调用数据库信息 ,最后将结果通过web服务器返回浏览器客户端。

6、返回处理结果给浏览器

即返回响应报文。响应报文由响应行+响应头+响应体组成。

  • 响应行:由协议版本、状态码及其描述组成。如HTTP/1.1 200 OK,其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。状态码有五种,分别以1~5开头,代表不同的含义。
  • 响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。同请求头部类似。
  • 响应体:即响应的消息体,如果是请求纯数据则返回纯数据,如果请求的是HTML页面,则返回HTML代码,如果请求JS则是JS代码。
7、关闭TCP连接

即四次挥手,简单描述为,浏览器向服务器发送断开连接请求,服务器返回断开连接的确认,服务器向浏览器发送断开连接请求,浏览器返回断开连接的确认。

  • 第一次挥手:浏览器发送一个FIN,用来关闭浏览器到服务器的数据传送,浏览器进入FIN_WAIT_1状态。
  • 第二次挥手:服务器收到FIN后,发送一个ACK=FIN+1给浏览器(确认序号为收到序号+1)(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。此时TCP链接处于半关闭状态,即浏览器已经没有要发送的数据了,但服务器若发送数据,则客户端仍要接收。
  • 第三次挥手:服务器发送一个FIN,用来关闭服务器到浏览器的数据传送,服务器进入LAST_ACK状态。
  • 第四次挥手:浏览器收到FIN后,浏览器进入TIME_WAIT状态,接着发送一个ACK=FIN+1给服务器(确认序号为收到序号+1),服务器进入CLOSED状态,完成四次挥手。
8、浏览器渲染页面
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值