HTTP与HTTPS
一.HTTP和HTTP1.1的区别
-
1.长连接
HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要使用keep-alive参数来告知服务器端要创建一个长连接。
-
2.节约带宽
HTTP1.0存在一些浪费宽带的现象,例如客户端只是需要某个对象的一部分,而服务器端却将整个对象送过来,并且不支持点续传功能。HTTP1.1支持只发送header信息(不带body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
-
3.HOST域
在HTTP1.0认为每台服务器都绑定一个唯一的IP地址,因此,请求信息中的URL并没有传递主机名(hostname),HTTP1.0没有host域。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求信息和响应信息都支持host域,且请求信息中如果没有host域会报告一个错误(400 Bad Request)。
-
4.缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
-
5.错误通知的管理
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
二.HTTP2.0和HTTP1.X相比的新特性
-
1.多路复用
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
-
2.头部数据压缩
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,网络传输效率高了。
-
3.服务器推送
服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
三.HTTPS与HTTP的区别
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
四.HTTPS工作流程
- 1.用户在浏览器发起HTTPS请求,默认使用服务端443端口进行连接;
- 2.HTTPS需要使用一套CA数字证书,证书内附带一个公钥Pub,而对应的私钥Private保留在服务端不公开。
- 3.服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;
- 4.客户端收到证书,校验合法性,主要包括是否在有l效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;
- 5.客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;
- 6.服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
- 7.服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
- 8.客户端使用随机Key对称解密密文,得到HTTP数据明文;
- 9.后续HTTPS请求使用之前交换好的随机Key进行对称加解密;
image.png
五.对称密钥加密与非对称密钥加密
对称密钥加密
- 又称私钥加密,即信息的发送方和接收方用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥加密
- 又称公钥加密,它需要使用一对密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。
非对称密钥通信过程从功能角度而言非对称密钥加密比对称密钥加密功能强大,但加密和解密速度却比对称密钥加密慢得多。
六.SSL/TLS协议基本原理
SSL/TLS协议的基本思路是采用公钥加密法(非对称密钥加密),简单来说,客户端先向服务器索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
(1).如何保证公钥不被篡改?
答:将公钥放在数字证书中,只要确保证书可信的,公钥就安全可用。
(2).公钥加密计算量太大,如何减少耗用的时间?
答:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
SSL/TLS协议的基本过程
- 1.客户端向服务器端索要并验证公钥。
- 2.双方协商生成“对话密钥”。
- 3.双方采用“对话密钥”进行加密通信。
参考文档:
https://juejin.cn/post/6844904127420432391
https://www.cnblogs.com/jesse131/p/9080925.html
https://blog.csdn.net/ailunlee/article/details/97831912