从浏览器地址栏输入网址,到网页彻底打开,中间都发生了什么?

从输入域名到网页打开的简单过程如下,还附加我自己的理解:

1.DNS域名解析

  客户端输入域名后,由DNS服务器来将域名解析成对应服务器的IP地址

2.建立TCP连接;

  获得服务器IP之后,就需要三次握手的协议才能建立连接
    1)客户端发送SYN包请求,等待服务器确认
    2)服务器确认收到SYN包请求后,同时自己也返回一个包给客户端,即返回SYN+ACK
    3)客户端收到SYN+ACK包之后,返回给服务器一个确认包ACK包表示收到,然后双方达成协议,建立连接

3.发送HTTP请求;

  与服务器建立连接之后,就可以向服务器发送请求了,请求需要遵循http协议

4.服务器处理请求;

  被请求的服务器解析用户请求的有哪些资源,通过服务器返回数据给客户端

5.返回响应结果;

  给客户端返回请求的状态码,通过状态码可以知道服务器端的处理是否正常

  常见状态码:状态码
    100 Continue 继续,客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝
    200 OK 请求成功,表示正常状态
    301 Moved Permanently 请求的网页已永久移动到新位置。
    400 Bad Request 语义有误,当前请求无法被服务器理解。或者是请求参数有错误
    404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。多数情况是找不到输入域名对应的网页。   
    500 Internal Server Error 一般来说,这个问题都会在服务器端的源代码出现错误时出现。。  

6.浏览器渲染:

  返回成功之后,浏览器拿到请求页面的代码,将其解析渲染出来。解析和渲染的过程主要由浏览器的渲染引擎实现

7. 断开连接:

  数据传输完毕,需要断开tcp连接,此时tcp发起4次挥手

  1)客户端发送给服务器,告诉服务器需要关闭tcp了

  2)服务器发送给客户端,告诉客户端我准备一下就关闭

  3)服务器发送给客户端,告诉客户端我已经准备好关闭了

  4)客户端发送给服务器,告诉服务器我也准备好关闭了。

 

我自己是用  "到外面吃饭" 这种方式来理解的:

1. 比如我要到某某餐馆吃饭,我先在地图上搜 餐馆在哪里,然后通过导航 找到该餐馆(域名解析)

2. 到达餐馆过后,我想我到底要吃什么(建立连接)

  1) 摸了摸口袋里的钱,发现只有两块钱,然后询问老板有没有两元的东西。(客户端发送包,等待服务器确认)

  2) 老板一看我的样子,就知道是个穷逼(服务器收到包),然后说只有馒头价格两元一个!(再返回一个包)

  3) 我欣喜若狂,掏出我压箱底的两元钱,告诉老板我要了(客户端返回一个包),老板表示蚊子再小也是肉,就接受了这个订单。我们快乐地达成了协议(达成协议)

3. 老板给后厨说准备一个馒头(发送http请求)

4. 后厨收到请求之后,开始准备馒头的材料(处理请求)

5. 没过多久,我就拿到了热腾腾的馒头(返回响应结果)

6. 拿到馒头之后我就开始了愉快的进食过程(渲染)

7. 吃饱之后就离开餐馆:(断开连接)

  1)我对老板说:老板,结账,我准备走了

  2)老板对我说:稍等一下,马上就来

  3)老板又对我说:一共两元。

  4)我付了账,对老板说:这馒头真好吃,我下次再来。

虽然上面的过程和真实的响应过程对应起来比较牵强,但是这能够帮助我理解什么时候是做什么事情,并不像原来一样全靠记忆。

posted @ 2018-01-17 13:55  站住,别跑  阅读(2398)  评论(0编辑  收藏  举报