在浏览器输入URL发生了什么?TCP三次握手以及四次挥手

在浏览器中输入网址按下回车经历了一个怎样的过程?
总的来说分为以下几个过程:
1、DNS解析:将域名解析为IP地址;
2、TCP连接:TCP三次握手;
3、发生HTTP请求;
4、服务器处理请求并返回HTTP报文;
5、浏览器解析渲染页面;
6、断开连接:TCP四次挥手;

下面为大家一一介绍以上过程:

一、DNS解析

DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。
网页通过向DNS服务器发送域名,DNS服务器查询到与域名相应的IP地址,然后返回给浏览器,浏览器在将IP地址打印在协议上,同时请求参数也会在协议搭载,然后一并发送给对应的服务器。

二、TCP连接三次握手

在客户端发送数据之前会发起TCP三次握手用以同步客户端和服务端的序列号和确认号,并交换TCP窗口大小信息。

TCP三次握手的过程:
TCP就是通信协议
1、第一次握手由浏览器发起,告诉服务器我要发送请求;
2、第二次握手由服务器发起,告诉浏览器我准备接收了,你发送吧;
3、第三次握手由浏览器发起,告诉服务器,我马上发送,准备接收;

为什么要发起三次握手:
为了防止已失效的连接请求报文段突然又传送到服务端,因而产生错误

三、发送HTTP请求

在TCP三次握手结束后,开始发送HTTP请求报文
请求报文由请求行、请求头、请求体三部分组成:

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

POST /chapter17/user.html HTTP/1.1
“POST” 代表请求方式
“/chapter17/user.html”表示URL
"HTTP/1.1"代表协议和协议的版本。

2.请求头包含请求的附加信息,由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
请求头部通知服务器有关于客户端请求的信息。它包含许多有关的客户端环境和请求正文的有用信息。其中比如:Host,表示主机名,虚拟主机;Connection,HTTP/1.1 增加的,使用 keepalive,即持久连接,一个连接可以发多个请求;User-Agent,请求发出者,兼容性以及定制化需求。

3.请求体,可以承载多个请求参数的数据,包含回车符、换行符和请求数据,并不是所有请求都具有请求数据。

name=tom&password=1234&realName=tomson
上面代码,承载着 name、password、realName 三个请求参数。

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

1、服务器
服务器是网络环境中的高性能计算机,它侦听网络上的其他计算机(客户机)提交的服务请求,并提供相应的服务,比如网页服务、文件下载服务、邮件服务、视频服务。而客户端主要的功能是浏览网页、看视频、听音乐等等,两者截然不同。 每台服务器上都会安装处理请求的应用——web server。常见的 web server 产品有 apache、nginx、IIS 或 Lighttpd 等。web server 担任管控的角色,对于不同用户发送的请求,会结合配置文件,把不同请求委托给服务器上处理相应请求的程序进行处理(例如 CGI 脚本,JSP 脚本,servlets,ASP 脚本,服务器端 JavaScript,或者一些其它的服务器端技术等),然后返回后台程序处理产生的结果作为响应。
在浏览器输入URL发生了什么?TCP三次握手以及四次挥手_第1张图片

2.MVC 后台处理阶段
后台开发现在有很多框架,但大部分都还是按照 MVC 设计模式进行搭建的。 MVC 是一个设计模式,将应用程序分成三个核心部件:模型(model)-- 视图(view)–控制器(controller),它们各自处理自己的任务,实现输入、处理和输出的分离。
在浏览器输入URL发生了什么?TCP三次握手以及四次挥手_第2张图片

1、视图(view):它是提供给用户的操作界面,是程序的外壳。
2、模型(model):模型主要负责数据交互。在 MVC 的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。
3、控制器(controller):它负责根据用户从"视图层"输入的指令,选取"模型层"中的数据,然后对其进行相应的操作,产生最终结果。

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

(1) 响应行包含:协议版本,状态码,状态码描述
状态码规则如下:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接收。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

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

(3) 响应主体包含回车符、换行符和响应返回数据,并不是所有响应报文都有响应数据

五、浏览器解析渲染页面

浏览器拿到响应文本 HTML 后,接下来介绍下浏览器渲染机制

浏览器解析渲染页面分为一下五个步骤:
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”方法,将呈现器的内容显示在屏幕上。
    重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的重绘。
    回流:某个元素的尺寸发生了变化,则需重新计算渲染树,重新渲染。*

六、断开连接:TCP四次挥手;

当数据传送完毕,需要断开 TCP连接,此时发起 TCP 四次挥手。
1、第一次挥手:由浏览器发起,发送给服务器,我请求报文发送完了,你准备关闭吧;
2、第二次挥手:由服务器发起,告诉浏览器,我接收完请求报文,我准备关闭,你也准备吧;
3、第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完毕,你准备关闭吧;
4、第四次挥手:由浏览器发起,告诉服务器,我响应报文接收完毕,我准备关闭,你也准备吧;

你可能感兴趣的:(在浏览器输入URL发生了什么?TCP三次握手以及四次挥手)