网络编程二——Http和Https协议

学习链接

这一篇文章应该包含了大多数关于Http和Https的知识点:这是一份关于HTTP协议的学习总结
本篇的学习文档也是在学习此文档的基础上,补充一些其他的细节。

补充

Http协议版本区别

名称 http1.0 Http1.1 Http2.0
TCP连接方式 短连接 长连接 长连接
并行请求 不支持 支持(效率低) 支持

从上表可以看出,Http协议从1.0版本到1.1版本,最重要的改变是TCP的连接方式从短连接变成了长连接,值得注意的是,这里的短连接和长连接的的概念是针对TCP传输层的

Http协议从1.1版本到2.0版本,最重要的改变是并行请求的效率大大提高了。

Cookies产生过程

  1. 用户登陆
  2. 服务器产生Session对象,并存入数据库
  3. 服务器将Session对象的SessionID放入报文的Set-Cookie中,发送给客户端
  4. 客户端收到SessionID,保存在本地,需要用到的时候,放入报文的Cookie

HTTPS的通信过程

Https采用了对称加密 + 非对称加密的数据加密模式。

客户端与服务端传递数据的时候,用的是对称加密,即客户端和服务端的密钥都是一致的。
而客户端和服务端要想保证密钥一致,就必须要用非对称加密的方式,将密钥传递给客户端或服务端。

所以,正常的流程一般是这样:

  1. 服务端生成非对称加密的公钥和密钥,客户端生成对称加密的密钥
  2. 服务器把公钥发给客户端
  3. 客户端把对称加密的密钥用服务器给的公钥加密并发给服务端
  4. 服务端收到后,用非对称加密的密钥解密后,就得到了对称加密的密钥
  5. 服务器将要发送的数据通过散列值生成算法生成消息摘要,然后用对称加密的密钥对消息摘要加密,然后将数据和加密后的消息摘要发送给客户端
  6. 客户端收到数据和消息摘要后,用同样的散列值算法对数据生成消息摘要,然后用密钥解密服务端发来的消息摘要,用它和自己生成的消息摘要对比,若一致,则说明数据没有被篡改过

一般流程是这样,但是有一个问题,若一开始服务端把公钥发送给客户端时,公钥就被拦截替换了,这不就会让客户端和非法服务端通信吗?所以为了保证服务端的公钥的正确性,这里引入了数字认证机构CA的出现。

所以,在上述流程中,在1和2之间,是这样的:
1.1 服务端提供自己的信息和公钥去CA申请数字证书
1.2 CA将公钥和信息生成消息摘要,并用CA私钥将消息摘要加密,然后将这些信息放入证书中,把证书给服务端
1.3 服务端在第一次和客户端通信时,将证书发给客户端
1.4 客户端用CA相同的算法生成消息摘要,然后用浏览器内置的CA证书公钥,对证书中的摘要进行解密,若一致,则说明数据没有被篡改过,说明服务器的公钥是正确的