HTTP 和 HTTPS

HTTP 和 HTTPS

fetch150zy

HTTP 与 HTTPS

区别

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输
  3. 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443
  4. 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 个特点

  • 无队头阻塞
  • 更快的连接建立
  • 连接迁移