从浏览器输入网址到页面显示的全过程

【前言】从全局来讲,当键入一个url时,肯定是需要从服务器请求某个页面或某条数据然后显示到用户自己的电脑屏幕上。这个过程中其实包括:DNS对url域名的解析(在url中解析出服务器所在的IP地址,有的url也包括端口),计算机网络中的五层协议层传输,代理服务器的响应、缓存或者负载均衡、最终html/css/js文件的解析与展现。从后端到前端,这只是概括,接下来将展开分析。

  持续更新,逐步完善。主要从TCP协议族、DNS、三次握手、服务器缓存和代理、负载均衡、四次挥手、html显示和渲染、流行的服务器类型和前端类型...争取精要简明。

一、客户端请求

  1.DNS对url域名的解析,获取主机所在的IP地址:

  (1)浏览器将url中抽取出主机名(域名),并将主机名传送给DNS应用的客户端;

  (2)DNS客户端向最近的DNS服务器发送一个包含主机名的请求,有可能逐级向上请求;

  (3)DNS客户端最终会收到一份回答报文,其中包含有对该主机名的IP地址。

  2.浏览器接收到来自DNS的IP地址,然后向位于该IP地址的80端口的HTTP服务器发起一个TCP连接(三次握手):

①客户端发送一个带SYN标志的TCP报文到服务器,这是第一次握手。

②服务器端发送一个相应报文回应客户端,这个报文同时带ACK标志和SYN标志。表示对刚才客户端SYN报文的回应,同时又标志ACK给客户端,询问客户端是否准备好进行数据通讯。这是第二次握手

③客户端必须再次回应服务端一个ACK报文进行确认,同时发送一个HTTP请求给客户端,这是第三次握手。

注意:每一次进行客户端到服务器端或服务器端到客户端的通讯都要经历这么几个步骤:从源的应用层-》传输层-》网络层-》链路层-》物理层—…………—到目的端的物理层-》链路层-》网络层-》传输层-》应用层,这也是前端中常说的为什么要减少客户端向服务端HTTP请求的原因,因为太耗时了!这个过程在最后讲解【注释1】。

3.建立完TCP连接便可以进行通信了,服务器返回http响应:

握手完毕后,服务器已经收到了客户端的http请求,服务器需要从本地磁盘找出客户端请求的数据,然后返回一条HTTP响应给客户端,并关闭TCP连接(但TCP只有当客户端收到数据后才会完全关闭,此时只是服务器端单方面无法与客户端传输数据)

4.客户端收到http响应,并关闭TCP连接:

由于TCP连接是双全工的,因此每个方向必须单独进行关闭。 这原则上是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向上的连接。收到一个FIN意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍然能发送数据。首先关闭的一方执行主动关闭,而另一方执行被动关闭, 3,4条中的TCP连接关闭细节(四次挥手)如下:

①服务器发送一个FIN,用来关闭服务端器到客户端的数据传送(第一次挥手)

②客户端收到这个FIN,它返回一个ACK,确认收到(第二次挥手)

③客户端关闭服务器的连接,发送一个FIN给服务器(第三次挥手)

④服务器收到这个FIN,斌返回ACK报文,确认收到(第四次挥手)

5.以上2,3,4条都是针对请求的该网站没有缓存代理的情况,如果该网站存在代理服务器,那么将由代理服务器来协调客户端与服务器的通信(此处很多细节在前面讲过就不再赘述,比如三次握手建立TCP连接,四次挥手关闭TCP连接的详细过程),如下:

①客户端建立一个到web缓存的TCP连接,并向web缓存器发送一条HTTP请求。

②web缓存器进行检查,看看本地是否存储了该对象的副本,如果有,web缓存服务器就向客户端发送一个HTTP响应报文。

③如果web缓存器中没有该资源,就打开一个到该对象初始服务器的TCP连接。web缓存器则在这个缓存器到服务器的TCP上发送一个HTTP请求,初始服务器返回HTTP相应。

④web缓存器收到响应后,在本地存储一份副本,并向客户端的浏览器用HTTP响应报文发送该副本。

6.客户端收到http响应发送过来的文件,并将文件解析成页面展示给用户:

①解析html构建DOM树

②构建render树

③布局render树

④绘制render树

当然,这个过程避免不了回流和重绘,这也是我们前端人员在开发中需要着重考虑的事情。

【注释1】过程:

源的应用层-》传输层-》网络层-》链路层-》物理层———………———目的端的物理层-》链路层-》网络层-》传输层-》应用层

(1)在源主机上,应用层将一串应用数据流传送给传输层。

(2)传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。

(3)在网络层给TCP报头加上源,目的主机IP地址和IP报头,生成一个IP数据报,并将IP数据包送交给链路层。

(4)链路层在其MAC帧的数据部分装上IP数据报,再加上源,目的主机的MAC地址和帧头,并根据其目的MAC地址发送目的主机或IP路由器。

(5)在目的主机,链路层将MAC帧的帧头去掉,并将IP数据发送至网络层。

(6)网络层检查IP报头,如果报头和计算结果不一样,则丢弃IP数据包,则向源主机要求重发消息。若检验和计算结果一致,则去掉报头,将TCP段发送至传输层。

(7)传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则去掉TCP报头,向源主机发送数据分组。否则,向源主机要求重发消息。

(8)目的主机收到来自源主机的字节流。

原文地址:https://www.cnblogs.com/huangfuyuan/p/9543629.html

时间: 2024-11-09 00:53:00

从浏览器输入网址到页面显示的全过程的相关文章

在浏览器输入网址到页面加载完毕中间到底发生了什么?(Browser-->Server)

最近在学习韩老师的php视频,中间有讲到发送请求到服务器返回内容,以前对这个理解并不深刻,虽然以前也知道一部分,这次听了之后收获良多:所以我就画了个流程图,从浏览器输入网址到服务器返回信息,浏览器渲染,呈现页面的具体过程. 今天是国庆节,明天才会出去玩,所以今天还是得学习,学习根本不能停啊,哈哈! 中间有错误的欢迎各位,不吝赐教,谢谢! 下面这个是韩老师画的图,内容也比较相似,所以我也放在上面,以便以后回顾: 其中有涉及到,http的状态码,我这个好多也确实记不住,所以为了以后需要的时候来看,我

输入网址到页面显示中间发生了什么

敲击回车后 1.DNS解析查找对应IP地址,首先是从本地缓存中搜索,没找到的话再从dns服务器开始查找,网址从右到左寻找 2.判断程序使用的协议,如果是HTTP协议,就发送http请求 3.建立TCP连接,提供可靠的字节流服务,三次握手 4.确定对方IP地址,同一子网下通过广播的方式传输数据包(子网掩码确定IP是否同一子网),不同子网下通过网关转发,利用ARP协议(地址解析协议)解析出MAC地址 5.将数据封装成帧,通过确认MAC地址传输 6.光纤等方式,通过高低电频传输01电信号 7.服务器收

从输入网址到页面显示经历了什么

一,解析域名转换成对应的公网的IP地址 二,根据公网IP通过互联网路由到对应的服务器上 三,建立可靠的TCP数据连接: 四,服务器对该URL中的请求进行处理分发,逐步返回一个完整的html: 五,浏览器或者客户端对该HTML进行渲染: 具体内容: 一,解析域名转换成对应的公网的IP地址 1,使用DNS服务,将域名解析为Ip地址: a,递归查询 b,迭代查询 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询 2,解析顺序 a,浏览器缓存 当用户通过浏览器访问某

在浏览器输入网址,Enter之后发生了什么?

启动浏览器,在地址栏输入我们将要访问的网页,然后按一下回车,OK,成功进入! 在我们回车之后,发生了什么事情?为什么我们会访问到期待的网页,我们究竟访问了谁?如何访问到他的? 我简单的向大家介绍一下,并不深入讲解,只能算作小白科普,不过这个科普还是很有必要的,它不仅能让我们认识到计算机之间是如何沟通的,也能让我们知道很多网络危机.故障是大致怎样产生的,以后遇到问题也好有一个切入点. 你的名字叫什么? 启动浏览器是浏览网页的第一步,毕竟是世界之窗嘛,然后我们在地址栏中输入一个网址,比如百度(www

在浏览器输入网址,Enter之后发生的事情

在浏览器输入网址,Enter之后发生的事情: 1. 浏览器接收域名 2. 发送域名给DNS,中文名字是域名系统服务器,一般位于ISP(互联网服务提供商,比如我们熟知的联通.移动.电信等) 中.浏览器会首先发给离自己最近的DNS,DNS收到浏览器发来的域名,在自己的数据库和缓存中查找这个域名所对应的IP,如果没有他会询问其他的DNS,递归下去直到弄清楚IP.最后把结果返回给浏览器. 3. DNS返回域名所对应的IP地址 4. 浏览器向因特网中发出请求 5. 路由器依据IP地址,把包裹送达IP所对应

Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址

今天在使用jupyter 时,已启动服务,但每次都需要手动去浏览器 输入网址才可以, 最好找了好久才解决了. 去cmd 命令窗口执行jupyter notebook --generate-config  可以找到  Jupyter_notebook_config.py文件 在文件中 找到 #c.NotebookApp.notebook_dir = '' 注意这里的谷歌路径是自己安装的谷歌路径,路径必须时双” \\ “否则报错 这样就成功的解决了这个问题 原文地址:https://www.cnbl

输入url到页面返回的全过程

1.      我们输入一个域名:www.baidu.com,然后点击确认: 2.      浏览器查找域名的IP地址.查找过程如下: 首先是浏览器缓存,浏览器会缓存DNS记录一段时间: 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用,获取系统缓存中的记录: 然后是路由器缓存,路由器一般会有自己的缓存: 如果前者都没有找到,就需要从本地域名服务器开始进行DNS查询了.详细的DNS查询过程我在DNS工作原理及过程中讲到过. 3.      现在浏览器找到了域名的IP地址,则需要向We

浏览器输入网址到浏览器渲染页面的过程

1) 在客户端浏览器中输入网址URL. 2) 发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址. 3) 客户端浏览器与WEB服务器建立TCP(传输控制协议)连接. 4) 客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求. 5) WEB服务器响应请求,返回指定的URL数据或错误信息:如果设定重定向,则重定向到新的URL地址. 6) 客户端浏览器下载数据,解析HTML源文件,解析的过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面. 7) 分析页面中

从输入网址到网页显示过程是什么?

在监测网站前,我们应先了解网络(Web)基本的运作方式.也就是从我们在浏览器中输入网址到浏览器显示页面,这个过程中到底发生了什么事?一般可分为如下7个步骤:1.浏览器中输入网址.2.发送至DNS服务器并获得域名对应的WEB服务器的ip地址. 3.与WEB服务器建立TCP连接.4.浏览器向WEB服务器的ip地址发送相应的http请求.5.WEB服务器响应请求并返回指定URL的数据,或错误信息,如果设定重定向,则重定向到新的URL地址.6.浏览器下载数据后解析HTML源文件,解析的过程中实现对页面的