2019独角兽企业重金招聘Python工程师标准>>>

根据 URL 请求页面过程

说实话,这类文章网上一抓一大把,而我仍想写这篇博客,一方面是想再仔细缕一下这个过程,另一方面是希望用清晰的语言和结构来解释,也算是小小地挑战一下自己。
过程概述

浏览器查找域名对应的 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步均在上一步未查询成功的情况下进行):
查找过程

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

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

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

操作系统将域名发送至 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 地址;

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

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

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

补充说明

域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,segmentfault.com 是 SF 的域名,根据这个域名可以找到 SF 的服务器,segmentfault.com/a/1190000003829539 是 URL ,可以根据这个 URL 定位我写的第一篇博客;

IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;

建立连接--三次握手

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

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

主机向服务器发送一个建立连接的请求(您好,我想认识您);

服务器接到请求后发送同意连接的信号(好的,很高兴认识您);

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

补充说明

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

网页请求与显示

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

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

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

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

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

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

断开连接--四次挥手

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

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

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

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

补充说明

为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所有服务器先发送确认信号,等所有数据发送完毕后再同意断开。

第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。

转载于:https://my.oschina.net/u/3687565/blog/1554030

从输入 URL 到页面加载完成的过程中都发生了什么相关推荐

  1. 从输入 URL 到页面加载完的过程中都发生了什么事情 —— 网络优化篇

     转自从输入 URL 到页面加载完的过程中都发生了什么事情 -- 网络优化篇 想到这不就是我这两年来研究的东西么,于是就接受一下挑战.网上已经有很多版本的答案了.这道题可以从浏览器端,网络传输和服 ...

  2. 从输入 URL 到页面加载完的过程中都发生了什么事情

    自己总结: 0.浏览器优化 0.1 智能匹配,DNS预取:输入w时已经把weibo.com的DNS预取了 1. 浏览器查找域名的ip 1.1 查看缓存 浏览器缓存.hosts文件 1.2 DNS服务器 ...

  3. 从输入URL到页面加载完的过程中都发生了什么事情

    http://mp.weixin.qq.com/s?__biz=MjM5NzA1MTcyMA==&mid=203632551&idx=5&sn=79888c6613149804 ...

  4. 从输入 URL 到页面加载完的过程中都发生了什么事情?

    1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号:协议是从该计算机获取资源的方式,常见的是HTTP.FTP,不同协 ...

  5. 从输入URL到页面加载完成的过程中都发生了什么事情?

    为了便于理解,我将整个过程分为了六个问题来展开. 第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱 ...

  6. 技术总结-从输入 URL 到页面加载完成的过程中都发生了什么事情?

    第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器 ...

  7. 从输入 URL 到页面加载完成的过程中都发生了什么事情?

    第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情? 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器 ...

  8. 从输入URL到页面加载完的过程

    一个HTTP请求的过程 为了简化我们先从一个HTTP请求开始,简要介绍一下一个HTTP求情的网络传输过程,也就是所谓的"从输入 URL 到页面下载完的过程中都发生了什么事情" ●D ...

  9. 从输入url到页面加载完成中间都发生了什么?

    从输入 URL 到页面加载完成的过程中都发生了什么事情? nwind | 24 May 2014 背景 本文来自于之前我发的一篇微博: 不过写这篇文章并不是为了帮大家准备面试,而是想借这道题来介绍计算 ...

最新文章

  1. HDU2222(AC自动机模版题)
  2. 使用tab键分割的文章能快速转换成表格。( )_无需按空格键,就能将Word文字对齐,3种方法了解一下...
  3. HDU 5044 Tree 树链剖分
  4. Bootstrap3 表格-带边框的表格
  5. word 段显示在页面最下方_Word你说的白是什么白
  6. GCD,大家都知道的回顾
  7. 不得了,日本出版社竟是这样吸引死宅学编程的
  8. jboss url路径_在JBoss的服务器端正确解码URL参数
  9. android取消自动调试模式吗,Android进入调试模式的三种技巧
  10. 【译】理解JavaScript闭包——新手指南
  11. Git钩子脚本可以和存储库一起管理吗?
  12. presto自定义UDF函数
  13. 使用tc对linux中某ip段限速
  14. 计算机自带游戏如何删除,win7怎么彻底删除自带游戏,win7自带游戏怎么删除隐藏...
  15. 龙芯3a3000+7a1000 单板调试
  16. 计算机毕业设计之java+springboot基于vue的网上图书商城系统
  17. APP上架各大应用市场教程:所需材料与注意事项
  18. 进程调度 优先级c语言,按优先级调度算法实现进程调度的程序
  19. bit、Byte、bps、Bps、pps、Gbps的详细说明及换算
  20. 软件项目管理第4版课后习题[附解析]第八章

热门文章

  1. 如何用cmd命令控制mysql数据库
  2. TCP断开连接为什么是4次挥手?
  3. chrome jssip
  4. 5.13T1Send 题(send)
  5. C语言博客作业--数据类型
  6. python全栈 互联网协议
  7. window下lamp环境搭建
  8. jquery学习(六)-jquery中的动画
  9. SQL Server select into 用法
  10. mysql8.0.18ZIP版下载与安装(以及无my-default.ini文件和data文件夹的解决方法)