学习链接
这一篇文章应该包含了大多数关于Http和Https的知识点:这是一份关于HTTP协议的学习总结。
本篇的学习文档也是在学习此文档的基础上,补充一些其他的细节。
补充
Http协议版本区别
名称 | http1.0 | Http1.1 | Http2.0 |
---|---|---|---|
TCP连接方式 | 短连接 | 长连接 | 长连接 |
并行请求 | 不支持 | 支持(效率低) | 支持 |
从上表可以看出,Http协议从1.0版本到1.1版本,最重要的改变是TCP的连接方式从短连接变成了长连接,值得注意的是,这里的短连接和长连接的的概念是针对TCP传输层的。
Http协议从1.1版本到2.0版本,最重要的改变是并行请求的效率大大提高了。
Cookies产生过程
- 用户登陆
- 服务器产生Session对象,并存入数据库
- 服务器将Session对象的SessionID放入报文的
Set-Cookie
中,发送给客户端 - 客户端收到SessionID,保存在本地,需要用到的时候,放入报文的
Cookie
中
HTTPS的通信过程
Https采用了对称加密 + 非对称加密的数据加密模式。
客户端与服务端传递数据的时候,用的是对称加密,即客户端和服务端的密钥都是一致的。
而客户端和服务端要想保证密钥一致,就必须要用非对称加密的方式,将密钥传递给客户端或服务端。
所以,正常的流程一般是这样:
- 服务端生成非对称加密的公钥和密钥,客户端生成对称加密的密钥
- 服务器把公钥发给客户端
- 客户端把对称加密的密钥用服务器给的公钥加密并发给服务端
- 服务端收到后,用非对称加密的密钥解密后,就得到了对称加密的密钥
- 服务器将要发送的数据通过散列值生成算法生成消息摘要,然后用对称加密的密钥对消息摘要加密,然后将数据和加密后的消息摘要发送给客户端
- 客户端收到数据和消息摘要后,用同样的散列值算法对数据生成消息摘要,然后用密钥解密服务端发来的消息摘要,用它和自己生成的消息摘要对比,若一致,则说明数据没有被篡改过
一般流程是这样,但是有一个问题,若一开始服务端把公钥发送给客户端时,公钥就被拦截替换了,这不就会让客户端和非法服务端通信吗?所以为了保证服务端的公钥的正确性,这里引入了数字认证机构CA的出现。
所以,在上述流程中,在1和2之间,是这样的:
1.1 服务端提供自己的信息和公钥去CA申请数字证书
1.2 CA将公钥和信息生成消息摘要,并用CA私钥将消息摘要加密,然后将这些信息放入证书中,把证书给服务端
1.3 服务端在第一次和客户端通信时,将证书发给客户端
1.4 客户端用CA相同的算法生成消息摘要,然后用浏览器内置的CA证书公钥,对证书中的摘要进行解密,若一致,则说明数据没有被篡改过,说明服务器的公钥是正确的
网友评论