HTTP协议格式
常见HTTP状态码
301 永久重定向,浏览器缓存新URL,自动跳转
302 临时重定向
403 权限不足,禁止访问
405 请求MethodNotAllowed
500 服务器内部错误
502 网关收到后端无效响应
504 网关等待后端响应超时
HTTP框架的设计与实现
HTTP/1.1
引入了持久连接机制,也称为HTTP keep-alive或HTTP连接重用.
缓存机制
存在队头阻塞问题
由于管道机制.且HTTP是文本协议,请求和响应没有序号标识关联,服务器只能按照收到的请求顺序逐一处理,然后依次响应,若其中一个请求非常耗时或者因为某些原因没有及时的响应,后面的其他请求就会阻塞.现代浏览器默认都关闭了管道化,使用停等协议.
HTTPS
数字签名
数字证书
是一种用于证实用户身份的数字凭证,由权威、受信任的机构(CA)颁发的
窃听风险
非对称加密无法解决窃听风险,第2步是明文传输,可以被路由器等中间设备获取到,然后就可以解密第4步骤消息
上图虽然可以窃取到公钥,但无法破解第3步,因为服务器的私钥无法被窃取。
篡改风险
冒充风险
证书的合法校验包括:
保证HTTP安全的手段总结
HTTPS具体如何实现?
Record记录协议:为高层协议(HTTP)提供数据封装、压缩、加密等基本功能的支持
Handshake握手协议:建立在Record协议之上的一种协议,用于在实际的数据传输开始之前,通信双方进行身份认证、协商加密算法、交换加密密钥等
TLS握手过程
TLSv1.3握手阶段只需要1个RTT
HTTP2
帧(frame)是数据传输的最小单位
帧格式: 帧分为 HEADERS 帧和 DATA 帧 (由Type字段标识)
所有 HTTP/2 帧的前 9 字节为帧头(Frame Header) ,后续为载荷(Payload) 。
流是一个逻辑上的概念,1个流由多个帧组成用同一个流ID标识,接收方通过流ID实现乱序请求和响应的关联
多路复用
1条TCP连接上通信双方可以并发的请求和响应.解决了应用层队头阻塞的问题(但没有解决传输层队头阻塞的问题).
HPACK头压缩
静态/动态表的原理都是维护一个KV表,以后传输时,只传输K即可
例子:
首次请求,初始状态动态表为空
1,3,5在静态表找到了K,但V为空,使用Huffman对其V压缩,同时动态表对应增加记录
2,4在静态表找到了对应的V.直接传递静态表中对应的K即可.
6的K在表中不存在,使用Huffman对其KV都进行压缩.同时在动态索引表中增加两条记录.
后续请求:
HTTP3
HTTP2基于TCP,虽然HTTP2可以并发传输数据,但到传输层TCP要求数据包必须按顺序串行传输,所以队头阻塞的问题并没有彻底解决.
QUIC(Quick UDP Internet Connections)
QUCI在用户空间实现了类似TCP的流量控制,拥塞控制,和重传机制等功能
HTTP3优点
安全性高
QUIC集成了TLSv1.3安全协议的大部分特性.在HTTP3中,加密不是可选的,而是一项内置功能.
建立连接快
无队头阻塞
连接迁移
平时在WIFI和4G移动网络切换时,IP肯定会发生变化,就需要重新建立TCP连接. 一条QUIC连接不再以IP及其端口的四元组标识,而是以一个64位的随机数作为ID标识.所以就算IP,端口变化,只要ID不变,应用层QUCI连接就一直维持着.
避免协议僵化
QUIC基于用户空间的协议,独立于OS内核.