发表于: 2019-11-10 23:07:10
0 1031
今天完成的事情:
1 调试用户列表,用户详情,用户冻结/解冻
明天计划的事情:
1 调试用户搜索页面
2 调试接口
遇到的问题:
1 暂无
收获:
1 前天只是粗略的看了下从输入url到渲染的过程,今天细看总结了一下
一个页面从输入URL到页面加载显示完成,这个过程都发生什么?
1DNS解析 - 2TCP连接 - 3发送HTTP请求 - 4服务器处理请求并返回HTTP报文 - 5浏览器解析渲染页面 - 6连接结束
1 DNS解析
DNS:域名系统Domain Name System
DNS解析
DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如www.baidu.com,其实不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。
解析过程
域名解析的过程是逐级查询,按以下步骤(DNS存在着多级缓存)
1 浏览器缓存: 首先会向浏览器的缓存中读取上一次访问的记录。
2 系统缓存:查找存储在系统运行内存中的缓存。
3 系统host文件:在缓存中都查找不到时,就会读取系统中预设的host文件中的设置。
4 路由器缓存:有些路由器也有DNS缓存的功能,访问过的域名会存在路由器上。
5 ISP的DNS缓存:互联网服务提供商(如中国电信)也会提供DNS服务,比如比较著名的 114.114.114.114,在本地查找不到的情况下,就会向ISP进行查询,ISP会在当前服务器的缓存内查找是否有记录,如果有,则返回这个IP,若没有,则会开始向根域名服务器请求查询。
6. DNS查询:.根域名服务器 - com顶级域名服务器 - google.com二级域名(主域)服务器 - www.google.com三级域名(子域)服务器。
网址解析是从右向左,解析过程为: . -> .com -> google.com. -> www.google.com.默认网址的最后一位都是.既然是默认情况下,为了方便用户,通常都会省略,浏览器在请求DNS的时候会自动加上
2 TCP连接(三次握手)
HTTP协议是使用TCP作为其传输层协议的
TCP协议是面向连接的:所以它在开始传输数据之前需要先建立连接,要建立或初始化一个连接,两端主机必须同步双方的初始序号。同步是通过交换连接建立数据分段和初始序号来完成的,在连接建立数据分段中包含一个SYN(同步)的控制位。同步需要双方都发送自己的初始序号,并且发送确认的ACK。此过程就是三次握手
3 发送HTTP请求
HTTP:超文本传输协议HyperText Transfer Protocol
发送HTTP请求:过程是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口 (HTTP协议80/8080, HTTPS协议443),由三部分组成: 请求行(请求协议),请求报头,请求正文。
请求行 : GET, POST, PUT, DELETE, OPTIONS, HEAD。 get和post区别
请求报头: 请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。例如,声明浏览器所用的语言,请求正文的长度等( 客户端不一定特指浏览器,有时候也可使用Linux下的CURL命令以及HTTP客户端测试工具等)
请求正文:当使用POST, PUT等方法时,需要客户端向服务器传递数据,这些数据就储存在请求正文中,请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
4 服务器处理请求并返回HTTP报文
HTTP响应报文也是由三部分组成: 响应行(状态码),响应报头,响应正文
响应行:与请求的起始行不同的是其包含的还有状态码和状态码的原因短语
响应头:对应请求报文中的请求头,格式一致,但是各自有不同的首部。也有一起用的通用首部
响应正文: 请求所需要的资源
常用状态码如下:状态码全
5 浏览器解析渲染页面
DOM:文档对象模型Document Object Model
6 连接结束
现在的页面为了优化请求的耗时,默认都会开启持久连接(keep-alive),那么一个TCP连接确切关闭的时机,是这个tab标签页关闭的时候。这个关闭的过程就是著名的四次挥手。关闭是一个全双工的过程,发包的顺序的不一定的。一般来说是客户端主动发起的关闭。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手
评论