从URL输入到页面展示到底发生了什么?

  1. DNS 解析:将域名解析成 IP 地址
  2. TCP 链接:TCP 三次握手
  3. 发送 HTTP 请求
  4. 服务器处理请求并返回 HTTP 报文
  5. 浏览器解析渲染页面
  6. 断开链接:TCP 四次挥手

1、DNS解析(域名解析)

1. URL是啥?

URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上资源,俗称网址。html

scheme://host.domain:port/path/filenamenginx

各部分解释以下:web

  • scheme - 定义因特网服务的类型。常见的协议有 http、https、ftp、file,其中最多见的类型是 http,而 https 则是进行加密的网络传输。
  • host - 定义域主机(http 的默认主机是 www)
  • domain - 定义因特网域名,好比 w3school.com.cn
  • port - 定义主机上的端口号(http 的默认端口号是 80)
  • path - 定义服务器上的路径(若是省略,则文档必须位于网站的根目录中)。
  • filename - 定义文档/资源的名称

2.IP地址是啥?

IP 地址是指互联网协议地址,是 IP Address 的缩写。 它是 IP协议提供的一种统一的地址格式,它为互联网上的每个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差别。IP 地址是一个 32 位的二进制数,好比 127.0.0.1 为本机 IP。redis

域名就至关于 IP 地址乔装打扮的假装者,带着一副面具。它的做用就是便于记忆和沟通的一组服务器的地址。apache

3.什么是域名解析?

DNS 协议提供经过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。浏览器

DNS 是一个网络服务器,咱们的域名解析简单来讲就是在 DNS 上记录一条信息记录。缓存

例如 baidu.com 220.114.23.56(服务器外网IP地址)80(服务器端口号)服务器

4. 浏览器如何经过域名去查询URL对应的IP呢?

  • 浏览器缓存:浏览器会按照必定的频率缓存 DNS 记录。
  • 操做系统缓存:若是浏览器缓存中找不到须要的 DNS 记录,那就去操做系统中找。
  • 路由缓存:路由器也有 DNS 缓存。
  • ISP 的 DNS 服务器:ISP 是互联网服务提供商(Internet Service Provider)的简称,ISP 有专门的 DNS 服务器应对 DNS 查询请求。
  • 根服务器:ISP 的 DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS 服务器先问根域名服务器.com 域名服务器的 IP 地址,而后再问.baidu 域名服务器,依次类推)

5. 小结

浏览器经过向 DNS 服务器发送域名,DNS 服务器查询到与域名相对应的 IP 地址,而后返回给浏览器,浏览器再将 IP 地址打在协议上,同时请求参数也会在协议搭载,而后一并发送给对应的服务器。 网络

image

2、TCP 三次握手

1. 网络基础 TCP/IP

  • 应用层

应用层决定了向用户提供应用服务时通讯的活动。TCP/IP协议族内预存了各种通用的应用服务。好比FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name Sysytem,域名系统),HTTP协议也处于该层。并发

  • 传输层

传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。在传输层有两个性质不一样的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。

  • 网络层

网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位,该层规定了经过怎样的路径(所谓的传输路线)到达对方计算机,比把数据包传送给对方。

  • 链路层(又名数据链路层,网络接口层)

用来处理连接网络的硬件部分。包括控制操做系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见的部分。

2. 发送HTTP大致流程

  1. 客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求
  2. 为了传输方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层
  3. 在网络层(IP协议,Internet Protocol),增长做为通讯目的地的MAC地址后转发给链路层。这样一来,发往网络的通讯请求就准备齐全了
  4. 接收端的服务器在链路层收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求
    image

3. TCP 三次握手

为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误,因此TCP须要三次握手。

image

  • 客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口(第一次握手,由浏览器发起,告诉服务器我要发送请求了)
  • 服务器发回一个带 SYN=1, ACK=X+1, Seq=Y 的响应包以示传达确认信息(第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶忙发送吧)
  • 客户端再回传一个带 ACK=Y+1, Seq=Z 的数据包,表明“握手结束”(第三次握手,由浏览器发送,告诉服务器,我立刻就发了,准备接受吧)

3、发送 HTTP 请求

请求报文由请求行(request line)、请求头(header)、请求体三个部分组成

image

1.请求行

请求行包含请求方法、URL、协议版本。

  • 请求方法包含 8 种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
  • URL 即请求地址,由 <协议>://<主机>:<端口>/<路径>?<参数> 组成
  • 协议版本即 http 版本号

POST /chapter17/user.html HTTP/1.1

2.请求头

请求头包含请求的附加信息,由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。

请求头部通知服务器有关于客户端请求的信息。它包含许多有关的客户端环境和请求正文的有用信息。其中好比:Host,表示主机名,虚拟主机;Connection,HTTP/1.1 增长的,使用 keepalive,即持久链接,一个链接能够发多个请求;User-Agent,请求发出者,兼容性以及定制化需求。

3.请求体

请求体能够承载多个请求参数的数据,包含回车符、换行符和请求数据,并非全部请求都具备请求数据。

4、服务器处理请求并返回 HTTP 报文

1.服务器

服务器是网络环境中的高性能计算机,它侦听网络上的其余计算机(客户机)提交的服务请求,并提供相应的服务,好比网页服务、文件下载服务、邮件服务、视频服务。而客户端主要的功能是浏览网页、看视频、听音乐等等,二者大相径庭。 每台服务器上都会安装处理请求的应用——web server。常见的 web server 产品有 apache、nginx、IIS 或 Lighttpd 等。

web server 担任管控的角色,对于不一样用户发送的请求,会结合配置文件,把不一样请求委托给服务器上处理相应请求的程序进行处理(例如 CGI 脚本,JSP 脚本,servlets,ASP 脚本,服务器端 JavaScript,或者一些其它的服务器端技术等),而后返回后台程序处理产生的结果做为响应。

2.MVC 后台处理阶段

  • 视图(view)

它是提供给用户的操做界面,是程序的外壳。

  • 控制器(controller)

根据用户从"视图层"输入的指令,选取"模型层"中的数据,而后对其进行相应的操做,产生最终结果。控制器属于管理者角色,从视图接收请求并决定调用哪一个模型构件去处理请求,而后再肯定用哪一个视图来显示模型处理返回的数据。

  • 模型(model)

模型主要负责数据交互。**在 MVC 的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。

首先浏览器发送过来的请求先通过控制器,控制器进行逻辑处理和请求分发,接着会调用模型,这一阶段模型会获取 redis db 以及 MySQL 的数据,获取数据后将渲染好的页面,响应信息会以响应报文的形式返回给客户端,最后浏览器经过渲染引擎将网页呈如今用户面前。

3.http 响应报文

响应报文由响应行(request line)、响应头部(header)、响应主体三个部分组成。

image

  • 响应行

响应行包含协议版本,状态码,状态码描述 :

  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操做。
  • 4xx:客户端错误--请求有语法错误或请求没法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求。
  • 响应头部

响应头部包含响应报文的附加信息,由 名/值 对组成

  • 响应主体

响应主体包含回车符、换行符和响应返回数据,并非全部响应报文都有响应数据

5、浏览器解析渲染页面

  • 根据 HTML 解析出 DOM 树
  • 根据 CSS 解析生成 CSS 规则树
  • 结合 DOM 树和 CSS 规则树,生成渲染树
  • 根据渲染树计算每个节点的信息
  • 根据计算好的信息绘制页面

1.根据 HTML 解析出 DOM 树

  • 根据 HTML 的内容,将标签按照结构解析成为 DOM 树,DOM 树解析的过程是一个深度优先遍历。即先构建当前节点的全部子节点,再构建下一个兄弟节点。
  • 在读取 HTML 文档,构建 DOM 树的过程当中,若遇到 script 标签,则 DOM 树的构建会暂停,直至脚本执行完毕。

2.根据 CSS 解析生成 CSS 规则树

  • 解析 CSS 规则树时 js 执行将暂停,直至 CSS 规则树就绪。
  • 浏览器在 CSS 规则树生成以前不会进行渲染。

3.结合 DOM 树和 CSS 规则树,生成渲染树

  • DOM 树和 CSS 规则树所有准备好了之后,浏览器才会开始构建渲染树。
  • 精简 CSS 并能够加快 CSS 规则树的构建,从而加快页面相应速度。

4.根据渲染树计算每个节点的信息

  • 布局:经过渲染树中渲染对象的信息,计算出每个渲染对象的位置和尺寸
  • 回流:在布局完成后,发现了某个部分发生了变化影响了布局,那就须要倒回去从新渲染。

5.根据计算好的信息绘制页面

  • 绘制阶段,系统会遍历呈现树,并调用呈现器的“paint”方法,将呈现器的内容显示在屏幕上。
  • 重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引发浏览器的重绘。
  • 回流:某个元素的尺寸发生了变化,则需从新计算渲染树,从新渲染。

6、断开链接

当数据传送完毕,须要断开 tcp 链接,此时发起 tcp 四次挥手。

image

  • 发起方向被动方发送报文,Fin、Ack、Seq,表示已经没有数据传输了。并进入 FIN_WAIT_1 状态。(第一次挥手:由浏览器发起的,发送给服务器,我请求报文发送完了,你准备关闭吧)
  • 被动方发送报文,Ack、Seq,表示赞成关闭请求。此时主机发起方进入 FIN_WAIT_2 状态。(第二次挥手:由服务器发起的,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧)
  • 被动方向发起方发送报文段,Fin、Ack、Seq,请求关闭链接。并进入 LAST_ACK 状态。(第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧)
  • 发起方向被动方发送报文段,Ack、Seq。而后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段之后关闭链接。发起方等待必定时间未收到回复,则正常关闭。(第四次挥手:由浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧)
相关文章
相关标签/搜索