当你在浏览器输入一个网址,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系列活动,请尽可能的涉及到所有的关键技术点。

链接: https://www.nowcoder.com/questionTerminal/4150a74bd14d4bd3a0d3f133376c97c7
来源:牛客网

1、    我们输入一个域名: www.taobao.com  

2.       浏览器查找浏览器缓存,如果有域名的 IP 地址则返回,如果没有继续查找;

3.       系统查找系统缓存,如果有域名的 IP 地址则返回,如果没有继续查找;

4.       路由器查找路由器缓存,如果有域名的 IP 地址则返回,如果没有继续查找;

5.       本地域名服务器采用迭代查询,它先向一个根域名服务器查询;

6.       根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器 dns.com 的 IP 地址;

7.       本地域名服务器向顶级域名服务器 dns.com 进行查询;

8.       顶级域名服务器 dns.com 告诉本地域名服务器,下一次应查询的权限域名服务器 dns.baidu.com 的 IP 地址;

9.       本地域名服务器向权限域名服务器 dns.baidu.com 进行查询;

10.   权限域名服务器 dns.baidu.com 告诉本地域名服务器,所查询的主机 www.baidu.com 的 IP 地址;

11.   本地域名服务器最后把查询结果告诉主机;

12.   主机浏览器获取到 Web 服务器的 IP 地址后,与服务器建立 TCP 连接;

13.   浏览器所在的客户机向服务器发出连接请求报文;

14.   服务器接收报文后,同意建立连接,向客户机发出确认报文;

15.   客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;

16.   此处客户机与服务器之间的 TCP 连接建立完成,开始通信;

17.   浏览器发出取文件命令: GET ;

18.   服务器给出响应,将指定文件发送给浏览器;

19.   浏览器释放 TCP 连接;

20.   浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;

21.   服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;

22.   服务器数据传输完毕后,向客户机发送连接释放报文;

23.   客户机接收到报文后,发出确认,然后等待一段时间后,释放 TCP 连接;

24.   浏览器显示页面中所有文本。


注:DNS域名解析过程

        



例如"mp3.baidu.com",域名先是解析出这是个.com的域名,然后跑到管理.com域名的服务器上进行进一步查询,然后是.baidu,最后是mp3,

所以域名结构为:三级域名.二级域名.一级域名。

浏览器终于得到了IP以后,浏览器接着给这个IP的服务器发送了一个http请求,方式为get,例如访问nbut.cn

这个get请求包含了主机(host)、用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive表示浏览器告诉对方服务器在传输完现在请求的内容后不要断开连接,不断开的话下次继续连接速度就很快了。其他的顾名思义就行了。还有一个重点是Cookies,Cookies保存了用户的登陆信息,在每次向服务器发送请求的时候会重复发送给服务器。Corome上的F12与Firefox上的firebug(快捷键shift+F5)均可查看这些信息。

发送完请求接下来就是等待回应了,如下图:

当然了,服务器收到浏览器的请求以后(其实是WEB服务器接收到了这个请求,WEB服务器有iis、apache等),它会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息。







猜你喜欢

转载自blog.csdn.net/pengzhisen123/article/details/80231728