HTTP
HTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。是运行在应用层上的。
HTTP1.0
在HTTP1.0,HTTP是非持续性连接。浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,连接无法复用
HTTP1.1
相对于HTTP1.0
- HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
- 还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求.(但是服务端还是按照客户端请求的顺序来返回数据)
HTTP2.0
- 二进制分帧:HTTP2.0将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
- 多路复用:HTTP1.1时,文件只能串行传输,想要并行就只能使用多个TCP连接。多路复用允许在一个HTTP/2连接发起多重请求。能支持多流并行传送。
- 服务器推送:可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。比如说服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。当然客户端也可以拒绝。
- 头部压缩:HTTP 1.1请求的大小变得越来越大,HTTP2.0通过只发送消息头中变化的部分来压缩消息头的大小。HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。
HTTPS
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL/TLS层,HTTPS的安全基础是SSL/TLS,因此加密的详细内容就需要SSL/TLS。 HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
对称加密和不对称加密
对称加密:只使用一个密钥就可以进行加密解密,使用密钥A进行加密后也可以使用密钥A进行解密。常见的有RC算法、IDEA算法等 非对称加密:加密和解密的密钥是不同的。两个密钥成对出现,使用密钥A加密后只能使用密钥B才能解密。常见的有RSA,ECC。
SSL/TLS加密方式
- ClientHello –:客户端发送所支持的 SSL/TLS 版本号、所支持的加密算法集合和随机数r1等信息给服务器端。
- ServerHello :服务器选择双方都支持的加密算法集合、SSL/TLS 版本号和一个随机数r2返回给客户端
- Certificate:服务端发送CA证书给客户端
- ServerKeyExchange:发送公钥给客户端
- ServerHelloDone:服务器返回结束
- 客户端生成随机数r3(注意这个随机数在客户端生成后,没有被明文发送过所以外人并不知道r3具体的值),使用公钥加密r3生成preMaster。客户端使用公钥加密r1+r2+r3生成会话密钥
- ClientKeyExchange:客户端发送preMaster给服务器
- 服务端接收到preMaster后使用私钥解密获得r3,使用公钥加密r1+r2+r3生成会话密钥
- ChangeCipherSpec:(互相发)通知对方,自己切换到了加密模式
- Encrypted Handshake Message:开始加密通话。之后的通讯都是用会话密钥来进行对称加密
HTTP和HTTPS的区别
1.HTTP传输的数据都是明文的,任何人可见。HTTPS传输的数据是经过SSL/TLS加密的,安全性更高 2.HTTPS需要使用CA证书(表明域名是谁的,日期什么的还包括了公钥私钥)。 3.HTTP默认端口80,HTTPS默认端口443 4.http的连接很简单,是无状态的(服务器是个渣男,他不会记得某个客户端曾经访问过他);HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
|