http是基于tcp连接的无状态的超文本传输协议,无状态就是没有记忆功能,也就是客户端上一次的请求,服务器无法保留,如果要获得,还需要重新获得一次。有很多实际的场景需要知道客户端上一次的请求信息。所以为了解决这个无状态的问题,出现了cookie。
http的版本:http1.0 http1.2 http2.0
区别:
1.0是一次请求结束就断开,这种效率太低,就相当于每次我一个请求都要消耗一次tcp连接和断开的时间,中间才是一次http请求,那么为了解决这个问题,就出现了http1.1的版本。
1.1可以保证长连接,就是一次tcp建立之后,如果该客户端后续还有请求要发送,那么这个连接会继续保持,而不会断开。
但是1.1还有一个问题,就是一次请求,服务器响应之后,第二个请求才能发过去,很显然这样的效率也不高。
为了解决这个多个请求并发的问题,那么就出现了2.0版本。
2.0可以同时发送多个请求,服务器端收到请求后根据请求的资源进行响应。
而https的一个很大的问题,就是不安全,传输的内容是不加密的,为了解决这个问题,就出现了https协议。
https其实就是http外面加了一个壳子:ssl协议(secure socket ),就是在http和tcp中间加了个SSL/TSL协议。
那么实现加密的方式有几种呢?
分为:对称加密,非对称加密,混合加密,ca认证证书加密。
对称加密和非对称加密
对称加密:就是加密和解密都是用同样的密钥
非对称加密:就是密文是公钥加密,那只能秘钥解密,密文是秘钥加密,那只能公钥解密。
过程是:客户端请求公钥,服务器端返回公钥,客户端拿到公钥后对明文进行加密,服务器拿到加密后的密文,使用自己本地保存的秘钥进行解密。这就是非对称加密。
上述虽然解决了安全性的问题,还是有问题,速度慢,效率低。
那么为了解决效率的问题,出现了混合加密。
混合加密:就是对称和非对称结合。
客户端请求公钥,服务器端返回公钥,此时客户端拿到公钥之后,自己本地生成一个随机数(randkey),用公钥对随机数进行加密,发送给服务器端,服务器端收到之后,使用自己的秘钥进行解密,然后得到randkey.(非对称加密)
客户端把自己要发送的明文用randkey进行加密,服务器端收到之后,采用randkey对密文进行解密,这一步是对称加密。
上述还有问题,就是中间传输的过程中,客户端请求公钥,中间被拦截,非法分子返回了一个公钥给客户端,但这不是服务器端给的,这个时候,客户端以为是服务器端给的,就会对自己的明文使用公钥进行加密,非法分子拿到之后进行解密,信息就暴露了。
为了解决这个问题,服务器端不自己制作公钥了,把这个活交给了CA认证机构,服务器先从CA机构申请公钥和秘钥的证书,证书上的信息:签名,发布机构,有效期,所有者,签名算法:sha-256+RSA.
客户端向CA机构拿到CA根证书,用来验证公钥的合法性。
客户端向服务器端申请证书,服务器端返回证书和数字签名,然后客户端拿这个证书和自己本地的ca根证书对应的公钥进行校验发现是我要访问的服务器。然后就可以把本地随机生成randkey使用公钥进行加密,然后服务器端收到之后,使用本地的私钥进行解密,得到了randkey,后续数据的传输就是使用的这个randkey,所以秘钥的获得算是非对称加密,数据传输是对称加密。
http和https的区别:
①安全性:https在http和tcp中间加了个SSL/TSL协议。
就是为了解决http不安全的问题。
②端口号分别是:80和443