问题:当我们在浏览器中输入一个网址按下回车后,可能经历哪些步骤呢?




第一步:当我们在浏览器地址栏中输入www.baidu.com并按回车后,首先是要找到这个URL的域名对应的服务器IP地址。而为了找到域名对应的ip地址,根据情况不同可能有多步操作:


1去看看浏览器缓存区是否缓存这当前输入的URL的域名对应的ip地址,如果有那么很ok,直接就找到了ip地址,如果没有那就继续往下走。

2 查看我们操作系统是否缓存我们需要的ip信息,同理找到结束,没有继续。

3 在我们的hosts文件中查看是否有配置信息,同上面一样找到结束,没有继续。比如我们的windows系统的hosts文件位置就在C:\Windows\System32\drivers\etc\HOSTS(受保护文件可能隐藏),里面一般都配置127.0.0.1 localhost,其实就是表名localhost对应的ip地址就是127.0.0.1。题外说一句,hosts文件劫持其实就是黑客去修改你的hosts文件,比如把www.taobao.com指向一个骗子开发的高仿网站上,当你双十一去买买买的时候,输入用户名和密码都会被骗子知道,更危险的还有银行等网站。

4 如果上面都没有找到我们需要的信息,那么下来就要本地DNS服务器出场了,本地DNS服务器可能还会有上级的DNS服务器,呈树状结构,会一级一级的向上查找。本地DNS地址在网络设置中设置,一般都是网络服务商给你提供,离你城市最近的一个DNS服务器地址。有时出现的qq可以上网,但是浏览器打不开网址一般都是DNS服务器配置出现了问题。和hosts文件劫持一样也存在着DNS劫持。

5 如果在第4步还没有找到对应的IP地址,下来本地DNS请求ROOT DNS Server(根域名服务器),目前根域名服务器全球有13台,国内一台没有。ROOT DNS Server并不存储域名 - IP 对应关系,它只是根据你域名的后缀,如.com、.cn等,给你一个gTLD服务器地址,让你去连接gTLD(通用顶级域名)服务器,然而gTLD服务器其实也不给你返回对应的ip信息,他会给你一个name server服务器地址,这个name server服务器其实就是此域名的服务注册商,这个name server才会真正的给你返回域名对应的ip地址,如果任何一步出现问题,那么不好意思要么网络服务出现问题要么你的域名输入错误, 一般后者居多。

上面步骤中,略去了缓存步骤,比如浏览器缓存区没有命中目标,但在后面任意一个步骤命中目标后都会缓存到浏览器中的,后面步骤类似,前一个步骤缓存后面的结果,具体的缓存失效时间等机制不做描述。


第二步:我们找到了IP地址,浏览器会根据IP地址给目标服务器发送HTTP请求。可以简单的理解为,一个HTTP请求就是建立了一个socket连接(socket连接其实需要IP+端口,没有的情况下,IPV4会用默认端口80,IPV6默认端口443),通过socket我们才能使用TCP/IP协议进行数据传输。socket连接建立以后,目标服务器会返回一个响应内容。比如我们有时在浏览网页时偶尔会发现的404、500错误都是服务器给我们返回的响应.


第三部:浏览器根据HTTP解析响应的内容,进行解析、布局和渲染。同时,相应的内容中可能还包含外部文件,每一个外部文件又会重复去执行第一步、第二部的步骤。如果目标网址用到了CDN加速,那么还有更多的工作步骤,CDN加速的简单理解其实就是把一些大的资源在网络中多处备份,用户要访问这个资源时,智能的到离自己最近的那个备份中获取资源。