# 状态码
2**
成功
200 成功,走强缓存
203 非授权信息
204 成功请求但无内容(no content)
3**
重定向
301永久重定向
302临时重定向
304 资源未改变,没有返回,走协商缓存
4**
客户端错误
401 未鉴权,没有登录
403 未鉴权,已登录没有权限,服务器拒绝处理
404 未找到资源
5**
服务器端错误
502 网关错误
# 请求协议
1. udp
(1)、无连接
(2)、不可靠
(3)、高效
(4)、应用于
直播
游戏
(5)、提供了一对一,多对一,一对多,多对多的传输方式
2. tcp
(1)、三次握手
tcp三次握手
1.客户端发送请求连接报文段,该报文段包含自身的数据通讯初始信号,请求发送后,客户端就进入了syn-sent状态
2.服务端接受到请求报文段后,如果同意连接,就会发送一个应答,应答的报文段也包含了自身的数据通讯初始序号,发送完成后就进入syn-received状态
3.客户端收到连接同意的应答后,还要像服务端发送一个确认的报文,发送完报文段后就进入established状态,服务端接收到这个应答后,也进入established状态,此时连接建立成功
**为什么需要三次握手,第二次握手不是可以连接吗?**
tcp有超时重传机制(ARQ协议),如果两端在断网之后都关闭了,此时重连机制仍旧会继续发送请求到服务端,此时服务端接收到重连的请求,会认为客户端需要建立tcp连接,所以状态会改为establish,但此时客户端是closed的,这会导致服务端一直处于等待的状态,造成资源的浪费
总结:防止失效的连接请求报文段被服务端接收,从而产生错误
(2)、四次挥手
1.若客户端数据发送完成,就会发送连接释放请求
2.服务端接收到连接释放请求后,会告诉应用层释放tcp连接,并发送ack包,随后进入closed-wait状态
此时表明客户端和服务端的连接已经释放,不会再接收客户端发送的消息了,但因为tcp连接是双向的,所以服务端仍旧可以发送数据给客户端
3.如果此时服务端有未发送的数据就会继续发送,完毕后会向客户端发送一个连接释放请求,此时服务端进入last-ack状态
4.客户端接收到连接释放请求后,会向服务端发送确认问答,此时客户端进入time-await状态,这个状态会持续2msl(最大段生存期,指报文段在网络中生存的时间,超时就会被抛弃),在这个时间段没有收到服务端的重发请求的话,会进入closed状态,服务端接收到客户端的确认问答后,会进入closed状态
**为什么要有time-await状态**
因为如果在客户端发送确认问答后马上进入closed状态,那么如果此时断网,服务端无法接收到客户端的确认问答,此时也就不能正常关闭
3. webcoket
支持对端通信,可以由client发起,也可以由server发起
先借助http发起请求,成功之后再升级到websocket协议,再通讯
没有跨域限制,使用的ws://开头,可以升级为wss,通过send和onMessage通信,而http时通过request和resposne通信
和http长轮询的区别
http长轮询是客户端发起请求,服务端阻塞,不会立即返回,有内容才会返回,所以需要处理timeout
websocket是客户端可以发起请求,服务端也可以。不存在服务端阻塞问题
# http
1. http2.0
**传送文本信息变为二进制**
**实现多路复用**
**头部压缩**
**可以进行服务器推送,1.0只支持单向**
2. http3.0
基于udp,速度更快
3. https
握手阶段,使用非对称加密通信。在正式传输数据时,使用对称加密通信
使用tsl协议进行加密
(1)、对称加密
两边都拥有相同的密钥,都知道如何加密解密。但是问题是如何让双方都知道密钥,如果将密钥通过网络的方式传递的话,一旦密钥被截获那加密就没有意义
(2)、非对称加密
服务器端公布公钥,客户端拿到公钥加密需要的数据,服务器端再通过私钥解密
缺点
**加密过程很慢**
**tls握手**
1.客户端发送随机值,以及需要的协议和加密方式
2. 服务器端自己也生成一个随机值,然后通过客户端需求的协议和加密方式来使用对应的方式处理,并且发送自己的证书
3.客户端收到服务端的证书并验证是否有效,验证通过再生成一个随机值,使用服务端返回的证书里的公钥进行加密,并传给服务端,如果服务端需要验证客户端证书的话会附带证书
4. 服务端通过私钥解密这个随机值,然后通过这三个随机值按照之前约定好的加密方式生成密钥,接下来的通信就可以通过这个密钥进行加密解密
**怎么验证网站服务器身份的?** 使用证书