本文摘要: 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次握手。
上图可以这么理解:
客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”
服务端:“收到,我看看我这边有木有数据了。”
服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”
客户端:“好嘞。”
七、浏览器解析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
相关推荐
卓越无比的多页面浏览器,无限制多开窗口,高效的内存释放功能,节省50%系统资源,开多个窗口后玩网游不卡。界面亲切友好,保留IE用户操作习惯的同时,全部兼容IE收藏夹、历史、链接等内容。不兼容其它插件,有效...
在《天龙八部》这款经典的大型多人在线角色扮演游戏(MMORPG)中,"宝宝"指的是玩家可以捕捉和培养的各种宠物,它们陪伴玩家在游戏中征战四方,提供各种战斗和非战斗技能的支持。"宝宝成长查询"是游戏中的一个重要...
在“媒介策划之天龙八步”中,这一概念被形象地比喻为武侠小说中的招式,揭示了媒介策划的系统性和步骤性。 首先,媒介策划不是简单的科学,而是一种融合了艺术与科学的实践活动。它要求策划人员不仅要有丰富的理论...
PHP+bootstrap快速生成MySql数据字典-天龙八步
项目中的"STM32F103C8步进电机定时器异步驱动之天龙八步"可能包含了详细的代码示例、原理图以及相关教程,帮助开发者理解如何将这些理论应用到实际项目中。通过学习和实践,开发者可以掌握如何利用STM32F103C8微控制...
600个天龙常规函数
天龙八部GM工具(易语言)源码 易语言源码
### 天龙dsd500用户指导 #### 一、产品概述 天龙dsd500(根据上下文推测可能是指Denon Cocoon系列中的一个型号)是一款集成了现代音频技术的高品质音响系统。它支持多种音频设备连接方式,并具备直观的操作界面,...
兼容各种数字输入设备,该设备安装有两个光学数字输入接口和一个同轴数字输入接口,能够连接各种电视和其他数字输入设备。 无线连接该设备支持蓝牙连接,能够将启用蓝牙的设备(例如智能手机和平板电脑)连接到本机...
【天龙 AVR-1912 高清说明书】提供了关于如何正确安装、连接和设置7.1声道家庭影院系统的详细指南。这款天龙功放是D&M Holdings公司的产品,致力于环保,提倡无纸化操作。用户可以通过配套的CD-ROM获取更详尽的操作...
- 更多操作:如需了解其他功能和详细操作步骤,可以在网络浏览器中输入指定URL访问Web手册,地址是:manuals.denon.com/AHC820W/ALL/EN/Web Manual。 DENON天龙AH-C820W通过蓝牙连接,提供了便捷的无线音乐体验,...
根据提供的文件内容,以下是关于天龙AV功放AVR-1610的详细知识点: 1. 设备型号及定位:天龙AV功放AVR-1610是天龙品牌中次世代低端型号,与AV590型号类似,定位于入门级市场,满足基本家庭影院需求。 2. 安全警告...
天龙八部axp文件更新功能实现代码。包括axpview和axpUpdater
《DENON天龙AVR-X1600H操作说明书》是DENON天龙公司针对其集成网络AV接收器AVR-X1600H提供的一份详细使用指南。这份说明书旨在帮助用户了解如何正确安装、连接和操作该设备,以实现最佳的音响体验。 在内容部分,...
### 天龙AVR3312:7.1声道家庭影院功放的全面解析 #### 一、产品概述 天龙AVR3312是一款高性能的7.1声道家庭影院功放,专为追求极致音效体验的影音爱好者设计。作为家庭娱乐系统的中心,它能够提供沉浸式环绕声...
面对这场危机,雀巢公司采取了一系列公关策略,但最终被评价为“天龙八步”般的失败案例。 1. **第一步:自视清高,装聋作哑** 雀巢公司在得知产品存在问题后,选择了沉默应对,错过了危机初期的黄金处理时间。...
### 天龙1807音响功放的关键知识点 #### 一、安全使用与注意事项 - **电击警告**:用户不可自行打开机器外壳进行维修,所有内部组件均由专业技术人员负责处理。 - **非绝缘“危险电压”警告**:产品内部存在非绝缘...
在深入探讨“天龙八部2系统刷重楼代码”的知识点之前,我们首先需要理解几个核心概念:《天龙八部》是一款深受玩家喜爱的大型多人在线角色扮演游戏(MMORPG),其游戏背景基于金庸先生的经典武侠小说《天龙八部》,...
后面板则提供各种输入和输出端口,如HDMI(支持ARC/eARC)、光纤、同轴、模拟音频输入、USB端口以及扬声器接线柱等。 在连接方法方面,说明书详细指导了如何连接扬声器,强调了标准连接方式,以及如何根据电视机的...
【标题】"tl.rar_Cloack.res_天龙_天龙辰时_时辰提醒器" 涉及的是一款名为“天龙辰时提醒器”的软件,它与“Cloack.res”资源文件有关,该软件可能是在天龙游戏背景下设计的,用于帮助玩家记住游戏中的特定时辰事件...