走进HTTP协议/HTTP1.1/2/3/HTTPS

260 阅读4分钟

HTTP协议格式

image.png

常见HTTP状态码

301 永久重定向,浏览器缓存新URL,自动跳转

302 临时重定向

403 权限不足,禁止访问

405 请求MethodNotAllowed

500 服务器内部错误

502 网关收到后端无效响应

504 网关等待后端响应超时

HTTP框架的设计与实现

image.png

image.png

HTTP/1.1

引入了持久连接机制,也称为HTTP keep-alive或HTTP连接重用.

缓存机制

image.png

存在队头阻塞问题

由于管道机制.且HTTP是文本协议,请求和响应没有序号标识关联,服务器只能按照收到的请求顺序逐一处理,然后依次响应,若其中一个请求非常耗时或者因为某些原因没有及时的响应,后面的其他请求就会阻塞.现代浏览器默认都关闭了管道化,使用停等协议.

HTTPS

数字签名

image.png

数字证书

是一种用于证实用户身份的数字凭证,由权威、受信任的机构(CA)颁发的

image.png

窃听风险

非对称加密无法解决窃听风险,第2步是明文传输,可以被路由器等中间设备获取到,然后就可以解密第4步骤消息 image.png 上图虽然可以窃取到公钥,但无法破解第3步,因为服务器的私钥无法被窃取。

image.png

篡改风险

image.png

冒充风险

image.png 证书的合法校验包括:

image.png

保证HTTP安全的手段总结

image.png

HTTPS具体如何实现?

image.png Record记录协议:为高层协议(HTTP)提供数据封装、压缩、加密等基本功能的支持

Handshake握手协议:建立在Record协议之上的一种协议,用于在实际的数据传输开始之前,通信双方进行身份认证、协商加密算法、交换加密密钥等

TLS握手过程

image.png

image.png

image.png

TLSv1.3握手阶段只需要1个RTT

HTTP2

image.png

image.png

帧(frame)是数据传输的最小单位

帧格式: 帧分为 HEADERS 帧和 DATA 帧 (由Type字段标识)

所有 HTTP/2 帧的前 9 字节帧头(Frame Header) ,后续为载荷(Payload)image.png

image.png

image.png 流是一个逻辑上的概念,1个流由多个帧组成用同一个流ID标识,接收方通过流ID实现乱序请求和响应的关联

多路复用

1条TCP连接上通信双方可以并发的请求和响应.解决了应用层队头阻塞的问题(但没有解决传输层队头阻塞的问题).

image.png

HPACK头压缩

静态/动态表的原理都是维护一个KV表,以后传输时,只传输K即可 image.png 例子:

image.png

首次请求,初始状态动态表为空 image.png 1,3,5在静态表找到了K,但V为空,使用Huffman对其V压缩,同时动态表对应增加记录 image.png 2,4在静态表找到了对应的V.直接传递静态表中对应的K即可.

6的K在表中不存在,使用Huffman对其KV都进行压缩.同时在动态索引表中增加两条记录.

image.png 后续请求:

image.png

HTTP3

HTTP2基于TCP,虽然HTTP2可以并发传输数据,但到传输层TCP要求数据包必须按顺序串行传输,所以队头阻塞的问题并没有彻底解决.

QUIC(Quick UDP Internet Connections)

QUCI在用户空间实现了类似TCP的流量控制,拥塞控制,和重传机制等功能 image.png

HTTP3优点

image.png

image.png

安全性高

QUIC集成了TLSv1.3安全协议的大部分特性.在HTTP3中,加密不是可选的,而是一项内置功能.

image.png

建立连接快

image.png

无队头阻塞

image.png

连接迁移

平时在WIFI和4G移动网络切换时,IP肯定会发生变化,就需要重新建立TCP连接. 一条QUIC连接不再以IP及其端口的四元组标识,而是以一个64位的随机数作为ID标识.所以就算IP,端口变化,只要ID不变,应用层QUCI连接就一直维持着.

避免协议僵化

QUIC基于用户空间的协议,独立于OS内核.