HTTP 各版本的区别
什么是 HTTP 和 HTTPS?
HTTP 是浏览器与服务器之间以明文的方式传送内容的一种互联网通信协议。
HTTPS 是在 HTTP 的基础上主要基于 SPDF 协议结合 SSL/TLS 加密协议,客户端依靠证书验证服务器身份传递加密信息的通信协议。
- 1991 年 HTTP/0.9 仅支持 GET 请求,不支持请求头
- 1996 年 HTTP/1.0 默认短连接(一次请求建议一次 TCP 连接,请求完就断开),支持 GET、POST、 HEAD 请求
- 1999 年 HTTP/1.1 默认长连接(一次 TCP 连接可以多次请求);支持 PUT、DELETE、PATCH 等六种请求;增加 host 头,支持虚拟主机;支持断点续传功能
- 2015 年 HTTP/2.0 多路复用,降低开销(一次 TCP 连接可以处理多个请求);服务器主动推送(相关资源一个请求全部推送);解析基于二进制,解析错误少,更高效(HTTP/1.X 解析基于文本);报头压缩,降低开销。
HTTPS 请求过程:(一次 HTTPS 请求要进行两次 HTTP 传输)
1.客户端发出 https 请求,请求服务端建立 SSL 连接;
2.服务端收到 https 请求,申请或自制数字证书,得到公钥和服务端私钥,并将公钥发送给客户端;
3.客户端验证公钥,不通过验证则发出警告,通过验证则产生一个随机的客户端私钥;
4.客户端将公钥与客户端私钥进行对称加密后传给服务端;
5.服务端收到加密内容后,通过服务端私钥进行非对称解密,得到客户端私钥;
6.服务端将客户端私钥和内容进行对称加密,并将加密内容发送给客户端;
7.客户端收到加密内容后,通过客户端私钥进行对称解密,得到内容。
HTTPS 怎么校验证书的有效性?
证书里面包含了公钥+各种信息+签名,公钥加密私钥解,私钥加密公钥解,通过私钥将签名解密后得到的信息和证书里面的信息比对就可以验证证书的合法性了。
签名是私钥和各种信息加密后形成的签名。
为什么 HTTPS 很安全却不普及?
1.加密通信与普通的文本通信,要消耗更多的 CPU 和内存,缓存慢,通信成本较大;
2.HTTPS 通信需要证书,而证书不是免费的。