TCP的三次握手和四次分手
三次握手
- 客户端发送一个包给服务器,等待服务器确认,此次含义为客户端希望与服务器建立连接。
- 服务器收到客户端发送的包后向客户端返回一个包,此次含义是服务器回应客户端已接收到来自客户端的包。
- 客户端收到服务器的包后再次向服务器发送一个包,表示自己可以接收到来自服务器的包,自此连接成立。
四次分手
- 客户端发送一个包给服务器,表示客户端主动关闭连接,然后进入等待状态。
- 服务器接收到客户端发送的包后返回一个包给客户端,此时服务器进入等待关闭状态。
- 客户端收到服务器的包后进入等待2状态,并等待服务器再次发包。
- 服务器再次向客户端发包,并等待客户端返回包。
- 客户端收到服务器发送的包后,返回一个包,并将自身状态改为关闭
- 服务器收到客户端发送的包后更改自身状态为关闭,自此,分手成功
HTTP1.0、HTTP1.1、HTTP2.0区别
1. 1.0
- 每次请求和响应完毕后都会销毁tcp连接,同时一个响应完成后才会发送下一个请求,这样做有两个问题:无法复用和队列阻塞
2. 1.1
- 允许在请求头中增加一个connection:keep-alive这样的请求头,允许请求在一段时间以内能够得到复用。
- 管道化:以不等第一个请求返回即可发送第二个请求,但是请求响应的顺序不变。
- 缓存处理:增加cache-control响应头,实现客户端缓存。
3 2.0
- 二进制分帧:数据以二进制传输。
- 多路复用:基于二进制分帧,在同一域名下所有访问都是从同一个tcp连接,并且不再有队列阻塞问题。
- 头部压缩:将头部中的常见信息替换为少字符
- 服务器推信息:2.0允许服务器直接推送给客户数据
HTTPS握手过程
- 客户端请求服务器,并告诉服务器自身的加密算法以及密钥长度等信息。
- 服务器响应公钥和服务器证书。
- 客户端验证服务器证数是否合法,然后生成一个会话密钥,并用服务器的公钥加密密钥,把加密的密钥传给服务器。
- 服务器使用私钥解密被加密的会话密钥并保存起来,然后使用会话密钥加密消息响应给客户端表示自己准备就绪
- 客户端使用会话密钥解密消息,知道了服务器已经准备好
- 后续双方消息通过会话密钥加密解密消息
HTTPS中间人的攻击
主要有SSL劫持与SSL剥离两种
- 劫持是指攻击者劫持了客户端与服务器之间的连接,将服务器的合法证书伪造的证书
- 剥离攻击指攻击者劫持了客户端与服务器的连接,攻击者保持自己和服务器的HTTTPS连接,但发送给客户端的是HTTP连接,由于HTTP是明文发送数据,即可获得所有数据
HTTP是如何复用TCP连接的
头部字段connetion:keep-alive,告诉服务器这是一个长连接,后续请求可以重复使用这一次的tcp连接。
文件上传如何做断点续传
客户端文件的二进制内容进行分片,每片数据按序排列进行序号标识,上传每片数据时间时附带其序号,服务端接收据时,将其保存成一个临时文件,并记录每个文件的hash值和序号。如若中途中断,将来再次上传时,可以向服务器索要上传后的分片需要,客户端根据其分片序号上传剩余部分即可。
介绍SSL和TLS
它们都是用于保证传输安全的协议,TLS是SSL的加强版本,都是介于传输层与应用层之间的。
GET与POST区别
从http协议角度来说,两者并无本质上的区别,之所以有区别是因为浏览器的特性 如下:
- GET请求时不会附带请求体
- GET请求传输信息量有限,POST无限制
- GET只能传输ASCII数据,遇到非ASCII的数据需要编码
- 大部分GET请求都附带在PATH地址中,能通过页面分享完整的重新页面,但同时也会暴露数据。
- GET请求可以保存书签,POST不可以
WebSocket协议是什么
WebSocket协议是HTML5带来的新协议,相当于HTTP,它是一个持久性连接的协议,它利用http协议完成握手,然后通过TCP连接通道发送消息,使用WebSocket协议可以实现服务器与客户端的双向通信。
WbeSocket与传统的HTTP连接相比有什么优势
当页面需要观察实时数据变化时,只能通过两种方式完成:长轮询或者短轮询,而WebSocket的出现就是解决这个问题,他利用HTTP协议握手后,就可以与服务器建立持久连接,服务器可以在任何需要的时候,主动推送消息给客户端,这样占用的资源最少,实时性最高。
在浏览器中输入地址后并按下回车会发生哪些事情
- 浏览器自动补齐协议和端口。
- 浏览器根据url地址查找是否有本地缓存。
- 如果无法命中缓存,进行DNS解析。
- 浏览器决定要附带哪些cookie到请求头中。
- 浏览器自动设置请求头,进入后端处理流程,完成处理后,服务器响应一个HTTP报文给浏览器。
- 浏览器通过使用的协议版本以及connection字段的约定,决定是否要保留TCP连接。
- 浏览器根据响应状态码决定怎么处理这一响应。
- 浏览器根据响应头中的content-type字段识别响应类型,如果是text/html,则对响应体的内容进行html的解析,否则做其他处理。
- 浏览器根据响应头中的其他内容完成缓存cookie的设置。
- 浏览器开始从上到下解析html,遇见外部资源则进行进一步请求。
- 解析过程中生成DOM树、CSSOM树,然后一边生成一边把二者合成渲染树,随后渲染树中的每个节点计算位置和大小,最后把每个节点利用GPU绘制到屏幕
- 最后触发load事件
网路性能优化
优化打包体积、多目标打包、cdn、缓存、http2、多静态资源域等
session如何过期
设置过期事件、浏览器主动清理
什么是DNS解析
dns解析就是指把域名转换为ip的过程,具体如:客户端先检查自身的映射,若找不到dns解析记录,则使用用户的dns服务器,若目标服务器中找不到记录,则继续往上层服务器中查找直到查到根服务器,根域名服务器会根据域名的类型解析,把任务分发到对应的子域名服务器中,直到查到记录位置。