概述一个页面从输入URL到页面加载完的过程


Posted in Javascript onDecember 16, 2016

过程概述

  • 浏览器查找域名对应的 IP 地址;
  • 浏览器根据 IP 地址与服务器建立 socket 连接;
  • 浏览器与服务器通信: 浏览器请求,服务器处理请求;
  • 浏览器与服务器断开连接。

以下为详细解析:

根据域名查找 IP 地址

概念解释

  • IP 地址:IP 协议为互联网上的每一个网络和每一台主机分配的一个逻辑地址。IP 地址如同门牌号码,通过 IP 地址才能确定一台主机位置。服务器本质也是一台主机,想要访问某个服务器,必须先知道它的 IP 地址;
  • 域名( DN ):IP 地址由四个数字组成,中间用点号连接,在使用过程中难记忆且易输入错误,所以用我们熟悉的字母和数字组合来代替纯数字的 IP 地址,比如我们只会记住 www.baidu.com(百度域名) 而不是 220.181.112.244(百度的其中一个 IP 地址);
  • DNS: 每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。

知道了上面的概念,大概就知道了想要获得服务器的门牌号码,需要先将域名转换成 IP 地址。转换过程如下(以查询 www.baidu.com 的 IP 地址为例,其中2、3、4步均在上一步未查询成功的情况下进行):

查找过程

1.浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);

2.搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);

3.搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);

4.操作系统将域名发送至 LDNS(本地区域名服务器,如果你在学校接入互联网,则 LDNS 服务器就在学校,如果通过电信接入互联网,则 LDNS 服务器就在你当地的电信那里。)LDNS 查询自己的 DNS 缓存(一般查找成功率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求;

  • LDNS 向 Root Name Server (根域名服务器,其虽然没有每个域名的的具体信息,但存储了负责每个域,如 com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 com 域的顶级域名服务器的地址;
  • LDNS 向 com 域的顶级域名服务器发起请求,返回 baidu.com 域名服务器地址;
  • LDNS 向 baidu.com 域名服务器发起请求,得到 www.baidu.com 的 IP 地址;

5.LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;

6.操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;

7.至此,浏览器已经得到了域名对应的 IP 地址。

补充说明

  • 域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,zhihu.com 是 知乎的域名,根据这个域名可以找到知乎的服务器,zhihu.com/people/CompileYouth 是 URL ,可以根据这个 URL 定位我的知乎主页;
  • IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;

建立连接--三次握手

知道了服务器的 IP 地址,下面便开始与服务器建立连接了。

通俗地讲,通信连接的建立需要经历以下三个过程:

  • 主机向服务器发送一个建立连接的请求(您好,我想认识您);
  • 服务器接到请求后发送同意连接的信号(好的,很高兴认识您);
  • 主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器两者建立了连接。

补充说明

  • TCP 协议:三次握手的过程采用 TCP 协议,其可以保证信息传输的可靠性,三次握手过程中,若一方收不到确认信号,协议会要求重新发送信号。

网页请求与显示

当服务器与主机建立了连接之后,下面主机便与服务器进行通信。网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。

1.浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;

2.服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;

3.服务器将得到的 HTML 文件发送给浏览器;

4.在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;

5.在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML ;

断开连接--四次挥手

1.主机向服务器发送一个断开连接的请求(不早了,我该走了);

2.服务器接到请求后发送确认收到请求的信号(知道了);

3.服务器向主机发送断开通知(我也该走了);

4.主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接;

补充说明

  • 为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所有服务器先发送确认信号,等所有数据发送完毕后再同意断开。
  • 第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 对象模型 执行模型
Oct 15 Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 Javascript
js的匿名函数使用介绍
Dec 11 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
jQuery及JS实现循环中暂停的方法
Feb 02 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
JS实现分页导航效果
Feb 19 Javascript
JavaScript原型链中函数和对象的理解
Jun 16 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 #Javascript
js继承实现方法详解
Dec 16 #Javascript
详解jQuery简单的表格应用
Dec 16 #Javascript
JS中parseInt()和map()用法分析
Dec 16 #Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 #Javascript
JS数字千分位格式化实现方法总结
Dec 16 #Javascript
jquery插件锦集【推荐】
Dec 16 #Javascript
You might like
php实现的短网址算法分享
2014/06/20 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
python实现电脑自动关机
2018/06/20 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
python和php学习哪个更有发展
2020/06/17 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
获奖的大学生创业计划书
2014/01/05 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
排查整治工作方案
2014/06/09 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
2014年销售部工作总结
2014/12/01 职场文书
感谢信格式范文
2015/01/22 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书