当你访问一个网址的时候,实际上发生了什么

转自:
https://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html

1.先输入一个网址 ,如 www.baidu.com
2.浏览器利用DNS通过访问的域名找出其IP地址(做 域名—IP 转换)
DNS先查找缓存,过程如下:
请求DNS解析 → 浏览器DNS缓存 → 系统hosts → 系统网络连接的DNS → 找不到则向根域名查找 → 返回IP地址

具体如下:
1.浏览器缓存 
浏览器会缓存DNS记录一段时间。 但是操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
2.系统缓存 
如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
3.ISP DNS 缓存 
 其次要检查的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
4.递归搜索 
 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
 
 以上都没有找到的话,就要通过DNS来查找了,但是DNS查找起来非常慢,以下几种方法可解决这个问题
1.循环 DNS 
它是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
2.负载平衡器 
它以特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
3.地理 DNS 
根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
4.Anycast 
Anycast 是一个IP地址映射多个物理主机的路由技术。 但是Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。  大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
3.浏览器给web服务器发送HTTP请求
4.服务器给浏览器响应一个301永久重定向响应,即把www.baidu.com重定向为http://www.baidu.com/
5.浏览器跟踪重定向地址
6. 服务器“处理”请求
7. 服务器返回一个HTML响应
8. 浏览器开始显示HTML
9. 浏览器发送获取嵌入在HTML中的对象
10. 浏览器发送异步(AJAX)请求 ,当页面显示完成后客户端仍与服务器端保持着联系

简单理解就是如下过程

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

猜你喜欢

转载自blog.csdn.net/wzt888_/article/details/83342137