常见面试题:浏览器输入域名并打开完成的过程

面试回答:

1.在浏览器地址栏输入域名

2.DNS解析IP

3.在发送http请求前,先进行DNS域名解析,获取访问的IP地址

4.浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手

5.握手成功后,浏览器向服务器发送http请求

6.服务器接收请求,处理并返回响应

7.浏览器接收到服务器HTTP响应内容

8.浏览器进行渲染,解析HTML生成DOM树,解析CSS生成规则树,js引擎解析js

9.渲染完毕,四次挥手,关闭tcp连接

详细说明:

一、DNS域名解析IP地址

        1.先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一段时间

        2.如没找到,再从操作系统查找

        3.如没找到,再从路由器缓存查找

        4.如没好到,再从ISP DNS缓存查找

        5.如果都没找到,浏览器域名服务器向根域>COM顶级域>二级域

二、TCP三次握手,(根据ip建立TCP连接)

        第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN©。此时客户端处于 SYN_Send状态。

        第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD的状态

        第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised状态

        服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接

三、HTTP请求发送给服务器

        请求行包括:请求方法,URL,协议版本;例如:GET + 空格 + /xxxxx/login.html + 空格 + HTTP/1.1

请求头字段:

        Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

        User-Agent:User-Agent头域的内容包含发出请求的用户信息。

        Accept: 浏览器可接受的MIME类型。

        Accept-Charset:浏览器可接受的字符集。

        Accept-Encoding:浏览器能够进行解码的数据编码方式

        Accept-Language:浏览器所希望的语言种类

        Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

        Content-Length:表示请求消息正文的长度。

        Host:客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

四、服务器处理请求,浏览器接受HTTP响应

响应行由协议版本、状态码及其描述组成;如 :HTTP/1.1 200 OK

其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。

常见的状态码如下:

        1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

        2xx:表示服务器已成功接收到请求并进行处理;

        3xx:表示服务器要求客户端重定向;

        4xx:表示客户端的请求有非法内容;

        5xx:表示服务器未能正常处理客户端的请求而出现意外错误,服务器差错;

状态码描述文本有如下取值:

        200 OK:表示客户端请求成功;

        400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

        401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

        403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

        404 Not Found:请求的资源不存在,例如,输入了错误的URL;

        500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

        503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

五、页面渲染,构建DOM树

        1、服务器通过后台语言程序处理,找到数据返回给浏览器

        2、HTML字符串被浏览器接受后被一句句读取解析,解析到link标签后重新发送请求获取css

        3、解析到sript标签后发送请求获取js,并执行代码,浏览器会进行渲染

        4、浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上,js会被执行 

        5、将解析后DOM树和CSS规则树关联起来构建渲染树,计算布局,绘制页面

六、TCP四次挥手(断开连接)

        第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。

        第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。

        第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

        第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态。
        服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊Sei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值