
HTTP 和 HTTPS

HTTP 与 HTTPS
区别
- HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输
- 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的
SSL/TLS
SSL/TLS协议的基本流程
- 客户端向服务器索要并验证服务器的公钥
- 双方协商生产「会话秘钥」
- 双方采用「会话秘钥」进行加密通信
HTTPS 如何保证数据完整性
- TLS协议包括多种用于确保数据完整性的算法,如HMAC(基于哈希的消息认证码)
- 这些算法结合加密算法,确保数据即使在传输过程中遭遇攻击,也能检测出任何非授权的更改
HTTPS 一定安全可靠吗?
这个问题的场景是这样的:客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个中间人服务器,于是客户端是和中间人服务器完成了 TLS 握手,然后这个中间人服务器再与真正的服务端完成 TLS 握手
从客户端的角度看,其实并不知道网络中存在中间人服务器这个角色。那么中间人就可以解开浏览器发起的 HTTPS 请求里的数据,也可以解开服务端响应给浏览器的 HTTPS 响应数据。相当于,中间人能够 “偷看” 浏览器与服务端之间的 HTTPS 请求和响应的数据
但是要发生这种场景是有前提的,前提是用户点击接受了中间人服务器的证书
HTTP/1.1 相比 HTTP/1.0 提高了什么性能
- 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销
- 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间
但 HTTP/1.1 还是有性能瓶颈
- 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩
Body
的部分 - 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞
- 没有请求优先级控制
- 请求只能从客户端开始,服务器只能被动响应
HTTP/2 优化
HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的
那 HTTP/2 相比 HTTP/1.1 性能上的改进
- 头部压缩
- 二进制格式
- 并发传输
- 服务器主动推送资源
HTTP/3 优化
HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP
UDP 发送是不管顺序,也不管丢包的,所以不会出现像 HTTP/2 队头阻塞的问题。大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输
QUIC 有以下 3 个特点
- 无队头阻塞
- 更快的连接建立
- 连接迁移