"天龙八步";细说浏览器输入URL后发生了什么

本文摘要:
1.DNS域名解析;
2.建立TCP连接;
3.发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染;
总结

当我们在浏览器输入网址并回车后,一切从这里开始。

一、DNS域名解析

我们在浏览器输入网址,其实就是要向服务器请求我们想要的页面内容,所有浏览器首先要确认的是域名所对应的服务器在哪里。将域名解析成对应的服务器IP地址这项工作,是由DNS服务器来完成的。

客户端收到你输入的域名地址后,它首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器。一般用户很少去编辑修改hosts文件。

DNS服务器层次结构

浏览器客户端向本地DNS服务器发送一个含有域名www.cnblogs.com的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其www.cnblogs.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地DNS服务器将含有www.cnblogs.com的IP地址的响应报文发送给客户端。

从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。

正常情况下,本地DNS服务器的缓存中已有comDNS服务器的地址,因此请求根域名服务器这一步不是必需的。

二、建立TCP链接

费了一顿周折终于拿到服务器IP了,下一步自然就是链接到该服务器。对于客户端与服务器的TCP链接,必然要说的就是『三次握手』。

三次握手

客户端发送一个带有SYN标志的数据包给服务端,服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束,连接成功。

上图也可以这么理解:

客户端:“你好,在家不,有你快递。”

服务端:“在的,送来就行。”

客户端:“好嘞。”

三、发送HTTP请求

与服务器建立了连接后,就可以向服务器发起请求了。这里我们先看下请求报文的结构(如下图):

请求报文

在浏览器中查看报文首部(以google浏览器为例):

请求行包括请求方法、URI、HTTP版本。首部字段传递重要信息,包括请求首部字段、通用首部字段和实体首部字段。我们可以从报文中看到发出的请求的具体信息。具体每个首部字段的作用,这里不做过多阐述。

四、服务器处理请求

服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。

服务器处理请求

五、返回响应结果

在HTTP里,有请求就会有响应,哪怕是错误信息。这里我们同样看下响应报文的组成结构:

响应报文

在响应结果中都会有个一个HTTP状态码,比如我们熟知的200、301、404、500等。通过这个状态码我们可以知道服务器端的处理是否正常,并能了解具体的错误。

状态码由3位数字和原因短语组成。根据首位数字,状态码可以分为五类:

状态码类别

六、关闭TCP连接

为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。

4次握手

上图可以这么理解:

客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”

服务端:“收到,我看看我这边有木有数据了。”

服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”

客户端:“好嘞。”

七、浏览器解析HTML

准确地说,浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS。以及还要加载图片、视频等其他媒体资源。

浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。

要注意的是,浏览器的解析过程并非是串连进行的,比如在解析CSS的同时,可以继续加载解析HTML,但在解析执行JS脚本时,会停止解析后续HTML,这就会出现阻塞问题,关于JS阻塞相关问题,这里不过多阐述,后面会单独开篇讲解。

八、浏览器布局渲染

根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。这时就要提到两个重要概念:replaint和reflow。

replaint:屏幕的一部分重画,不影响整体布局,比如某个CSS的背景色变了,但元素的几何尺寸和位置不变。

reflow: 意味着元件的几何尺寸变了,我们需要重新验证并计算渲染树。是渲染树的一部分或全部发生了变化。这就是Reflow,或是Layout。

所以我们应该尽量减少reflow和replaint,我想这也是为什么现在很少有用table布局的原因之一。

最后浏览器绘制各个节点,将页面展示给用户。

总结

本文系统地讲述从浏览器从输入域名到最终页面展示的整体流程。篇幅所限,本文的每一步讲述其实并不全面,所以后面我会单独就域名解析、HTTP请求/响应、浏览器的解析、渲染等内容单独开篇讲解,感兴趣的朋友也可以关注我的个人博客 

更多技术分享,欢迎关注『网站建设运维百科』

参考:

http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/

http://taligarsiel.com/Projects/howbrowserswork1.htm

https://www.zhihu.com/question/34873227

图片制作工具:Axure、PS、 Ulead GIF Animator、 ProcessOn

时间: 2024-09-04 22:32:00

"天龙八步";细说浏览器输入URL后发生了什么的相关文章

网站推广之天龙八步

第一步:岁月无声 记数器想必是每个主页必备的(这里只讨论有排行榜的记数器),它不仅能记录下你成长的每一个脚步,也能通过排行榜使站点扬名,所以晚做不如早做.这里还有放置的问题,最好是把它放在主力首页.第二步:注册引擎 虽说在搜索引擎注册是使站点扬名的主要办法,这里也有技巧问题,并非注册它就了事.其中搜索的关键词(keywords)的作用非常重要,由于关键词在各地区的定义各不相同,因而应尽量发挥你的特色,如你的站点是那种千网一面的站点,只要按照最接近的关键字,增设一些栏目,就可加大被搜索到的机会.第

天龙八步:8步让你变成数据科学家

OK, 这些步骤不是那么简单.但是,它们都是可操作的,并且大多数步骤都是免费或者花钱很少,只是要你投入时间. 首先,什么是数据科学家?数据科学,是一个多学科知识的交集,甚至包括黑客技巧.数据科学家,是比软件工程师更擅长统计学,比统计学家更擅长软件工程的人.目前,数据科学家的典型教育背景是:高中5%,技校5%,大专14%,本科37%,硕士/专业学位31%,博士9%. 第一步:学好统计.数学和机器学习 数学:可汗学院(Khan Academy)的数学,MIT公开课的线性代数:统计学:Udacity和

《Arduino奇妙之旅:智能车趣味制作天龙八步》一3.3下一步是什么?

3.3 下一步是什么? 所以现在你可以欣赏组成小发明1的电路了.你可能会问自己,"好吧,然后呢"(或者你可能问自己,"披萨店的电话号码是多少?在这个制作完成后,我有点饿了!") 那么,你有三件遗留的事情要做: 1.创建将载入Arduino的一个草图(或程序). 2.将Arduino与笔记本计算机或计算机连接. 3.打开门,从房间里放出Cade和Elle. 在第4章,你将要做这三件事.你将要学习如何给Arduino编程,让它成为一个键盘修复工具,以及学习如何输入需要的

《Arduino奇妙之旅:智能车趣味制作天龙八步》一导读

前 言 乐趣.我们想要用一个词来形容我们对这本书的终极目标,以及一个词--我们希望你将使用它来描述这本书,而这就是我们所选择的那一个词.当然,还有其他的目标,但在最后,当你读完这本书时,我们希望你会喜欢本书介绍的内容.许多书使用引言来解释这本书讲的到底是什么,读者将会学会什么,读者需求什么(一个技能或者可能一个项目或者一款软件),以及当读完最后一页时留给读者的将是什么.这也是本书的引言所希望做到的,我们期待这是个愉快的开始.所以,欢迎阅读本书.这里我们不会用太多篇幅在引言上,仅仅通过几页来告诉你

《Arduino奇妙之旅:智能车趣味制作天龙八步》一2.3.2 开发环境

2.3.2 开发环境 软件和驱动程序安装完毕后,双击Arduino的exe可执行文件打开Arduino IDE,这个图标可能在你的计算机桌面上,或者在"应用程序"文件夹中(Mac操作系统),或者在"所有程序"/"程序"文件夹中(Windows操作系统).图2-7是打开IDE之后的显示界面. 注意安装IDE是非常简单的,你可以登录网址http: //arduino. cc/en/Guide/MacOSX和 http://arduino.cc/en/

《Arduino奇妙之旅:智能车趣味制作天龙八步》一2.3.1 Windows操作系统下的注意事项

2.3.1 Windows操作系统下的注意事项 在Windows操作系统下安装这个软件时,有一些事项,这里想与大家分享一下.如果你习惯了只是简单插入设备,然后让它工作,那么在Windows操作系统下安装这个软件,对你来说可能会有点复杂.因为你必须手动安装驱动,而不能盲目地点击"下一步"按钮.下面是在Windows 7上安装IDE这个软件的过程中得到的一点启示,希望对大家有所帮助. 提示 先浏览这部分的背景信息,然后登录arduino.cc找到IDE的官方安装说明,再根据提示安装,希望看

《Arduino奇妙之旅:智能车趣味制作天龙八步》一3.1.1 电位计

3.1.1 电位计 对于挑战1,你将要把一个电位计连接到Arduino上作为传感器使用.电位计是个很小的器件,它有一个旋钮,可以向前或向后旋转.你将旋转电位计上的旋钮来"拨号",并发现旋钮的位置必须产生0到9之间的数值.这些数字将会用来模拟打开门锁时输入键盘的密码. 注意 如果你还没有电位计,那也没问题.读完接下来其他部分的内容.然后记录附录A中完成挑战1所需要的器件.购买这些器件,在它们到手之后再回头阅读本章节内容. 理想的情况是,当你阅读每一篇紧紧联系的章节时,你的手边有每一个挑战

《Arduino奇妙之旅:智能车趣味制作天龙八步》一2.3 安装软件

2.3 安装软件 我们不知道你是用Windows.Linux还是Mac操作系统来创建骨架的,但值得高兴的是,IDE对这三个操作系统都是适用的.打开浏览器,访问www.arduino.cc,点击屏幕上绿色菜单栏下的下载按钮,下载Arduino IDE.下载与你的操作系统相匹配的IDE之后,点击"开始"按钮,然后根据提示安装软件,这个提示针对Windows.Linux和Mac操作系统有三种不同的版本,你要注意区别,选择适合自己计算机的相应版本进行安装. 注意 仔细阅读与你的操作系统相匹配的

《Arduino奇妙之旅:智能车趣味制作天龙八步》一第3章

第3章 挑战1:检查硬件在第3章,准备好手中的Arduino,这样就可以制作一些东西.但是将要制作什么呢?我们想告诉你,你将要创建一个技术性很强的计算机系统,它会控制一个救生舱,这个救生舱将会放大并解救Elle和Cade.但是像其他任何你在生活中习得的技巧一样,成功的关键是从缓入手和从简入手.我们的第一个任务将是弄清楚用到的硬件资源,来完成这个发明,将Cade和Elle从被困的房间里解救出来.然而你很快就会看到,它不是一个复杂的发明.事实上,在你完成发明制作后,将Cade和Elle从被困房间里救