三、在浏览器输入网址后发生了什么
当我们打开浏览器,在地址栏中输入www.baidu,com,按下回车键,计算机都做了什么事?
1、请求流程
①、域名解析
首先会将输入的URI解析成服务IP,这个过程涉及复杂,下面单独说明
②、先建立TCP连接
拿到目标服务IP后,浏览器会通过TCP和目标服务器建立TCP连接,毕竟HTTP也是通过TCP来实际传输数据的,所以建立连接是基础。
经过 SYN、SYN/ACK、ACK 的三个包之后,浏览器与服务器的 TCP 连接就建立起来了。
③、发送请求
通过 TCP 发送“GET / HTTP/1.1”请求报文,服务器在收到请求后会给客户端回复一个ACK包(在 TCP 协议层面确认,HTTP层看不到),表示刚才的请求已收到
④、服务器处理
当服务器接受到请求后会先解析报文、处理请求、最后结果响应,拼成符合 HTTP 格式的报文,发回去。
⑤、客户端处理结果
当浏览器收到回复后首先要给服务器回复一个 TCP 的 ACK 确认,表示已经收到了,因为是TCP层的确认报文,所以HTTP层还是不可见的。
然后客户端会进行报文解析,再根据资源类型,调用排版引擎、JavaScript 引擎等等处理一下,然后在浏览器窗口里展现页面。
2、DNS域名解析
①、为什么需要域名
- 为了好记,baidu.com肯定比一窜数据好记;
- 而且这个IP还有可能变动呢(比如更换个服务器、扩容、缩容);
- 对于访问量很大的网站,还可以通过域名来做负载均衡,一个域名对应多台服务器,客户端换着请求;对于baidu.com这种大规模的网站,还可以针对地理位置来返回最近的服务器,响应更快
- 域名还可以标志组织,因为他就是一个命名空间,使用多级域名就可以划分出不同的国家、地区、组织、公司、部门,每个域名都是独一无二的,可以作为一种身份的标识,例如org表示政府组织
②、域名的组成
主机名.~.二级域名.顶级域名
域名是一串用"."分隔的有层次的结构,从最右边开始是“顶级域名”、“二级域名”,最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。
③、域名的解析
DNS 的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:
- 根域名服务器:管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;
- 顶级域名服务器:管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 baidu.com 域名服务器的 IP 地址;
- 权威域名服务器:管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.baidu.com的 IP 地址。
比如要访问www.baidu.com,就要进行这样的查询过程(注意,是从右向左解析查询):
- 访问根域名服务器,拿到“com”顶级域名服务器的地址;
- 访问“com”顶级域名服务器,拿到“baidu.com”域名服务器的地址;
- 最后访问“apple.com”域名服务器,拿到“www.baidu.com”的地址。
从上面的流程也看到了,如果每个域名解析都走一遍这样的流程,那根域名服务器哪受得了啊,不得早崩了。所以,还得一些措施来减少这些很重要的域名服务器的压力。是时候祭出缓存大法了,通过这两种方式来减轻每一级的域名解析服务器的压力。
非权威域名服务器:有些非DNS官方的公司、或者运营商会搭建自己的DNS服务器,用来作为用户DNS的解析代理,要是自己的DNS服务器有这样的缓存,就直接给用户返回,要是没有就去核心DNS系统查询。
主机缓存:也就是你的电脑把域名解析的历史记录下来,避免每次都去外部解析,主机缓存会有多层:
- 操作系统缓存
- “主机映射”文件,Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”
整个域名解析过程就是:
先查浏览器缓存,然后是系统缓存->hosts文件->局域网域名服务器->广域网域名服务器->顶级域名服务器->根域名服务器
那么你知道如果直接在地址栏里输入IP访问时会发生什么吗?
#学习路径#
一个专栏搞定HTTP学习和面试,都是自己的学习笔记。