url: Uniform Resource Locator 统一资源定位器

组成: 协议: // 域名 : 端口/ 路径 / 文件夹(文件)

例如: https://www.baidu.com/pages/index.html

https 的端口443

http 是80/8080/3128/8081/9098 中的某一个

根域名服务器:

最高层次的域名服务器. 最重要的域名服务器. 所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址.

在因特网上共有13个根域名服务器, 分别以a-m开头以a.rootservers.net的形式命名.

顶级域名服务器:

管理在该顶级域名下注册的二级域名, 即.com .cn .org .edu ..., 这些顶级域名都有一个对应的服务

器, 比如.com域名服务器, 在这个服务器中, baidu.com, sina.com qq.com...都归它管.

当收到DNS查询请求时, 给出相应的回答.(可能是最终结果, 也可能是下一步应该查找的域名服务器的IP地址).

本地域名服务器:

当主机发出DNS查询请求的时候, 查询请求报文就发送给本地域名服务器. 离用户都比较近, 可能是一个ISP, 或

者一个大学等等, 都可以有本地域名服务器. 一般不超过几个路由的距离.

域名解析过程:

  1. 主机向本地域名服务器查询一般都是递归查询.

    ​ 如果主机所询问的本地域名服务器不知道被查询域名的IP地址, 本地域名服务器就会以DNS客户的身份, 向其他根域名服务器继续发出请求报文, (代替主机去查询, 不是主机自己去查询).

    ​ 递归查询的结果要么是域名的IP地址, 要么报错无法找到

  2. 本地域名服务器向根域名服务器的查询通常是采用迭代的方式

    ​ 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时, 要么给出要查询的IP地址, 要么告诉本地服务器: "你下一步应该去哪一个服务器进行查询", 然后本地服务器进行后续查询(不是根域名服务器代为查询, 而是本地域名服务器自己去).

    ​ 根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器. 让本地域名服务器再向顶级域名服务器查询, 顶级域名服务器在收到本地域名服务器的查询请求之后, 要么给出所要查询的IP地址, 要么告诉本地域名服务器下一步应该向哪一个权限域名服务器查询, 本地域名服务器就像这样进行迭代查询, 最后知道了所要解析域名的IP地址. 把这个结果返回给主机.

DNS查询步骤:

​ 假设我们的主机想去访问zhidao.baidu.com

  1. 主机向本地域名服务器发出查询请求, 进行递归查询.
  2. 本地域名服务器采用迭代查询, 向根域名服务器发起查询请求
  3. 根域名服务器告诉本地域名服务器, 下一次查询应该去顶级域名服务器.com的IP地址
  4. 本地域名服务器向顶级域名服务器.com查询
  5. 顶级域名服务器告诉本地域名服务器, 下一次查询应该去baidu.com权限域名服务器baidu.com的IP地址
  6. 本地域名服务器向权限域名服务器baidu.com进行查询
  7. 权限域名服务器告诉本地域名服务器, 所查询zhiudao.baidu.com的IP地址
  8. 本地域名服务器最后把这个结果返回给主机

这8个步骤总共使用了8个UDP用户数据报文, 本地域名服务器经三次迭代查询之后, 从权限域名服务器baidu.com

知道了zhidao.baidu.com的IP地址.

​ 当然, 本地域名服务器也可以采用递归查询, 只是这样一来, 后面根域名服务器与其他几个服务器之间的查询就跟本地域名服务器没什么关联了, 最后, 本地域名服务器在根域名服务器哪里得到了需要知道的IP地址

​ 本地域名服务器采用何种方式进行查询, 取决于查询报文请求头的设置.

​ 本地域名服务器一般部署了高速缓存, 在这个本地域名服务器的管理范围内, 如果某个主机查询过某个域名, name这个域名的IP地址会被暂时保存下来, 如果另外有用户也要去访问这个域名, 就直接从高速缓存中读取IP地址, 返回给主机.

回答提出的问题:

  1. 输入url, 按下回车

  2. 缓存检查

    1. 根据url检查浏览器缓存, 看时候之前访问过这个url的IP.

    2. 如果没有, 检查操作操作系统的DNS缓存

    3. 如果没有, 检查路由器的DNS缓存

    4. 如果没有, 查找ISP DNS缓存

      以上四个步骤如果有, 直接把IP地址返回给主机, 进行第四步

  3. 如果找遍了所有的缓存, 都没有找到, 进行这一步, DNS解析, 按照上面的DNS解析过程进行解析, 最终由本地域名服务器返回给主机对应url的IP地址

  4. 浏览器将http请求发送给对应IP的服务器,

  5. 服务器处理请求

    web server 都安装了请求处理应用, 例如Apache, nginx,IIs

    ​ web 服务器收到http请求(request), 会返回一个http响应(response), 返回给浏览器

  6. 浏览器处理返回的信息

    ​ 网页 加载 解析 渲染

    **加载: **

    ​ 浏览器对一个html页面的加载顺序是从上而下的。如果加载过程中遇到外部css文件,浏览器另外发出一个请求,来获取css文件。遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。但是当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。

    **解析: **

    ​ 将文档转化成为有意义的结构,也就是可让代码理解和使用的结构。解析得到的结果通常是代表了文档结构的节点树,它称作解析树或者语法树,也就是构建DOM树 .

    css解析:

    js解析是文件在加载的同时也进行解析 , 详见js加载时间线

    **渲染: **

    ​ 构建渲染树

    最终呈现页面.