应用层
应用层为应用程序提供交互服务,网络服务与最终用户的一个接口,是网络应用程序及其应用层协议存留的地方,例如HTTP、FTP、SMTP、DNS等。
DNS(Domain Name System)是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
DNS协议的作用是将域名解析成IP地址,以便于计算机之间相互通信。
DNS的工作原理是:当用户在浏览器中输入一个域名时,浏览器会向本地DNS服务器发出请求,本地DNS服务器一般是由网络服务提供商提供的,也可以是由网络管理员搭建的。本地DNS服务器收到请求后,首先会查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程结束;如果没有,本地DNS服务器就要向根DNS服务器发出请求,根DNS服务器收到请求后会返回一个所查询域的主域名服务器的地址,本地DNS服务器收到后,继续向主域名服务器发出请求,这个过程一般会进行两次,第一次向主域名服务器请求的是所查询域的权威DNS服务器的地址,第二次向权威DNS服务器请求的是域名对应的IP地址,当本地DNS服务器收到IP地址后,就可以将其返回给用户的浏览器,用户的浏览器最后根据IP地址向web服务器发出请求,web服务器返回响应后,用户就可以看到web页面了。
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP/2是一种新的HTTP协议,它由SPDY协议演变而来,由IETF的HTTPbis工作组进行开发,于2015年5月作为标准正式发布。
HTTP/2的目标是通过支持请求与响应的多路复用,有效压缩HTTP头部字段数据,允许服务器主动向客户端推送非请求的资源等方式来减少网络延迟,提升页面加载速度,进而提升用户的使用体验。
HTTP/2的主要特性:
二进制分帧:HTTP/2在应用层和传输层之间增加了一个二进制分帧层,通过二进制分帧层将HTTP消息分割成更小的帧,并对它们采用二进制格式的编码,从而实现了一个完整的消息可以由多个帧组成,帧之间可以乱序发送,然后再根据每个帧首部的流标识符重新组装成完整的消息。
多路复用:HTTP/2在同一个TCP连接上可以存在多个流,每个流都有一个唯一的标识符,而且流之间是相互独立的,可以随意的交错传输,这样就避免了HTTP/1.1中的队头阻塞问题。
首部压缩:HTTP/2使用HPACK算法对首部进行压缩,减少了首部的大小,降低了网络延迟。
服务器推送:HTTP/2允许服务器主动向客户端推送非请求的资源,这样可以避免客户端重复的请求资源,提高页面加载速度。
HTTP/3是一种新的HTTP协议,它由QUIC协议演变而来,由IETF的HTTPbis工作组进行开发,于2021年8月作为标准正式发布。
HTTP/3的目标是通过支持请求与响应的多路复用,有效压缩HTTP头部字段数据,允许服务器主动向客户端推送非请求的资源等方式来减少网络延迟,提升页面加载速度,进而提升用户的使用体验。
HTTP/3的主要特性:
HTTP/3的优势:
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS协议的主要作用可以分为两种:
HTTPS的优势:
IP协议是TCP/IP协议族中最核心的协议,它负责将数据包从源主机传输到目标主机。
IP协议的主要特性:
IP协议是一种无连接的、不可靠的协议,它不会对数据包进行任何形式的检查和确认,也不会对数据包进行重传,因此它不能保证数据包的可靠传输。
IP协议是一种无状态的协议,它不会对数据包进行任何形式的状态记录,也不会对数据包进行任何形式的状态检查,因此它不能保证数据包的顺序传输。
IP地址是IP协议中用于标识主机的一种地址,它由32位二进制数组成,通常以点分十进制的形式表示。
WebSocket是一种网络通信协议,很多高级功能都需要它,例如浏览器与服务器之间的实时通信。
WebSocket协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
WebSocket协议和HTTP协议都是应用层协议,都基于TCP协议。但是,WebSocket协议是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动向对方发送或接收数据,就像Socket一样;而HTTP协议是一种单向通信协议,只能由Client Agent向WebSocket服务器发送请求,WebSocket服务器不能主动向Client Agent发送数据,但是WebSocket服务器可以向Client Agent发送HTTP响应。
前端工程化是指将软件工程的技术和方法应用到前端开发中,通过工具链的方式提高开发效率、降低维护成本、提升代码质量的手段。
圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验:
程序的可能错误和高的圈复杂度有着很大关系。
圈复杂度 | 代码状况 | 可测性 | 维护成本 |
---|---|---|---|
0 - 5 | 良好 | 高 | 低 |
5 - 10 | 良好 | 中等 | 中等 |
10 - 20 | 较差 | 低 | 高 |
20 - 30 | 差 | 很低 | 很高 |