DNS 解析:将域名解析成 IP 地址
TCP 链接:TCP 三次握手
发送 HTTP 请求
服务器处理请求并返回 HTTP 报文
浏览器解析渲染页面
断开链接:TCP 四次挥手
1、DNS解析(域名解析)
1. URL是啥?
URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上资源,俗称网址。html
scheme://host.domain:port/path/filename nginx
各部分解释以下: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 地址打在协议上,同时请求参数也会在协议搭载,而后一并发送给对应的服务器。 网络
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大致流程
客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求
为了传输方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层
在网络层(IP协议,Internet Protocol),增长做为通讯目的地的MAC地址后转发给链路层。这样一来,发往网络的通讯请求就准备齐全了
接收端的服务器在链路层收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求
3. TCP 三次握手
为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误,因此TCP须要三次握手。
客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口 (第一次握手,由浏览器发起,告诉服务器我要发送请求了)
服务器发回一个带 SYN=1, ACK=X+1, Seq=Y 的响应包以示传达确认信息 (第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶忙发送吧)
客户端再回传一个带 ACK=Y+1, Seq=Z 的数据包,表明“握手结束” (第三次握手,由浏览器发送,告诉服务器,我立刻就发了,准备接受吧)
3、发送 HTTP 请求
请求报文由请求行(request line)、请求头(header)、请求体三个部分组成
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 后台处理阶段
它是提供给用户的操做界面,是程序的外壳。
根据用户从"视图层"输入的指令,选取"模型层"中的数据,而后对其进行相应的操做,产生最终结果。控制器属于管理者角色,从视图接收请求并决定调用哪一个模型构件去处理请求,而后再肯定用哪一个视图来显示模型处理返回的数据。
模型主要负责数据交互。**在 MVC 的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。
首先浏览器发送过来的请求先通过控制器,控制器进行逻辑处理和请求分发,接着会调用模型,这一阶段模型会获取 redis db 以及 MySQL 的数据,获取数据后将渲染好的页面,响应信息会以响应报文的形式返回给客户端,最后浏览器经过渲染引擎将网页呈如今用户面前。
3.http 响应报文
响应报文由响应行(request line)、响应头部(header)、响应主体三个部分组成。
响应行包含协议版本,状态码,状态码描述 :
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 四次挥手。
发起方向被动方发送报文,Fin、Ack、Seq,表示已经没有数据传输了。并进入 FIN_WAIT_1 状态 。(第一次挥手:由浏览器发起的,发送给服务器,我请求报文发送完了,你准备关闭吧)
被动方发送报文,Ack、Seq,表示赞成关闭请求。此时主机发起方进入 FIN_WAIT_2 状态。 (第二次挥手:由服务器发起的,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧)
被动方向发起方发送报文段,Fin、Ack、Seq,请求关闭链接。并进入 LAST_ACK 状态。 (第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧)
发起方向被动方发送报文段,Ack、Seq。而后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段之后关闭链接。发起方等待必定时间未收到回复,则正常关闭。 (第四次挥手:由浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧)