你一定听过以下三种协议,但是他们都是什么,各自的发展史,各自的特点是什么呢?今天就来简单的介绍一下,如有错误欢迎指出
- HTTP协议
- HTTPS 协议
- Websocket 协议
1. HTTP 协议
1.1 什么是HTTP协议
HTTP 超文本传输协议 (Hypertext Transfer Protocol, 是一个简单的请求-响应协议,通常运行在TCP之上。底层是基于TCP/IP协议的。是应用层协议,是无状态的。是互联网应用最为广泛的一种网络协议。
1.2 HTTP协议的发展历史
产生时间 | 版本 | 内容 | 发展现状 |
---|---|---|---|
1990 | HTTP/0.9 | 交换信息的无须协议,仅限于文字,只能get请求 | 没有作为正式的标准 |
1996 | HTTP/1.0 | 传输内容格式不受限制,增加了put,patch,head,options,delete | 正式作为标准 |
1997 | HTTP/1.1 | 持久连接,节约宽带,host域,管道机制,分块传输编码等 | 正式作为标准 |
2013 | HTTP/2 | 多路复用,服务器推送,头信息压缩,二进制协议等 | 正式作为标准 |
2018 | HTTP/3 | – | – |
1.2.1 : 发展史 详解
详细可以看你知道HTTP2吗?
http1.0 有以下瓶颈
1.一条连接上只能发送一个请求
2.请求只能从客户端开始,客户端不可以接受除了响应以外的其他指令
3.首部未经压缩就发送, 首部信息越多延迟越大
4.每次互相发送相同的首部造成浪费
5.可任意选择数据压缩格式。
复制代码
所以为了解决以上的问题
1.AJAX : 局部web页面替换加载的异步通信手段。即: 只更新局部页面
2.comet : 一旦服务器有内容更新, 就直接返回给客户端,不会让请求等待
利用ajax和comet技术可以提高web的浏览速度,但并没有解决http协议本身存在的问题,
复制代码
所以有了HTTP1.1, HTTP1.1 新增了2个特性
1.持久连接keep-alive : 节省通信量(http1.1 默认都是持久连接的)
因为tcp每次断开都会增加通信量的开销,所以有了持久连接,可以加快web页面的打开速度。
2.管道化pipeling: 不需要等响应,直接发送下一次请求,这样就不会发生1.0中的队头阻塞了
复制代码
但是HTTP1.1 只解决了部分问题,所以有了SPDY协议
HTTP2 就是基于 SPDY协议 , 谷歌发布的, 专门为了解决HTTP 协议所遭遇的瓶颈。
1. 以会话层方式加入
2. 使用了SSL(在传输层和应用层之间对网络连接进行加密)
具有多路复用,赋予请求优先级,压缩HTTP首部,服务器预推送功能,服务器提示功能等
复制代码
但是他并不能消除web展示速度的问题,
因为SPDY基本上只是将【单个域名】的通信多路复用,对一个web网站来说, 域名太多, 改善效果会收到限制。并且很多web网站病不是仅仅由HTTP 协议瓶颈导致的问题,所以要想提高web网站的速度还是要从其他地方入手。
所以有了HTTP3!
基于UDP协议的QUIC协议,
原生具有多路复用,一条流丢包不会影响其他流,
小丢包情况下,其他流有冗余数据可以重组,不需要重传,
加密安全
复制代码
HTTP 协议的特点
- 无状态
- 每次请求都要重新建立连接
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应简单快速、灵活
- HTTP2 有 具有多路复用,赋予请求优先级,压缩HTTP首部,服务器预推送功能,服务器提示功能等
HTTP 协议的缺点:
http虽然使用广泛,但是也存在不小的安全缺陷,在网络支付中尤其明显
- 通信使用明文,内容会被窃听
- 不验证通信方的身份信息,可能遭到伪装
- 报文不完整, 容易遭到篡改
HTTP 消息结构
HTTPS 协议
1. HTTPS定义:
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer):
是以安全为目标的HTTP通道,在HTTP基础上通过传输加密和身份认证保证了传输过程的安全性,HTTPS在HTTP的基础上加入了SSL(下面有介绍),多用于交易支付等方面。
2. HTTPS 加密:
HTTPS 加密最终是对称加密,但是对称加密的key在传输过程中使用的是非对称加密,所以HTTPS严格上来说是混合加密 。
其中非对称加密传输对称加密的秘钥的过程叫通信加密(SSL)。
而建立完安全通道后,使用对称加密传输内容的过程叫内容加密(但是内容加密有被篡改的风险)
2.1 常见的加密方式有2种:
1. 对称秘钥加密(共享秘钥加密)
对称密钥加密,又称为对称加密、私钥加密、共享秘钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
攻击者只要获得秘钥,就可以解密,所以有了公开秘钥加密。
常见的对称加密算法:DES、3DES、AES、Blowfish、IDEA、RC5、RC6;
- 客户端自己封装一种加密算法
- 发送 加密数据 和 秘钥 给服务端
- 服务端用秘钥解密数据
2 非对称秘钥加密(公开秘钥加密)
在这种密码学方法中,需要一对密钥,一个是私人密钥(不公开),另一个则是公开密钥(公开的)。
这两个密钥是数学相关,是某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。
相对于对称加密 处理速度会慢一些
signal项目中发送消息用的是DH加密算法就是非对称秘钥加密。
- 服务器端为客户端统一创建一个加密方式,由服务器端指定创建,称为公钥
- 客户端使用公钥加密,然后将密文传输给 服务端
- 服务端使用 私钥 解密
常见的非对称加密算法:RSA、Elgamal、背包算法、Rabin。
RSA这种加密算法应用非常广泛,如SSH、HTTPS、TLS、电子证书、电子签名、电子身份证等。
2.1 证书秘钥加密 CA:
定义:
用到三方机构,数字证书,服务器端和客户端足以信任的机构,服务器端将公钥发送给三方机构,在三方机构 做一个防伪标识,数字签名,公钥携带三方机构的证书发送给客户端,客户端使用公钥对数据进行加密。
目的:
用来解决公钥传输信任问题。
如何防止CA被篡改:
-
每个证书上都有数字签名: CA 会用一些摘要算法(MD5算法 单向函数生成的散列值)将证书的明文生成摘要,然后用CA的私钥进行加密,生成签名
-
验签的过程: client 拿到证书后,用同样的摘要算法将明文生成摘要,然后对比。
2.2 总结 HTTPS 加密过程:
服务端需要生成密钥对,并且向CA申请证书,然后把公钥附在证书上,传给client,这样当client拿到证书上的公钥时,可以用此公钥 加密 【对称加密的密钥】 传给 服务端。
HTTPS 协议的缺点:
- 购买证书要钱
- 消耗cpu 以及内存, 这样对于用户访问量很大的网站, 就会减少处理的请求数和速度。
websocket协议:
定义:
web浏览器和web服务器之间全双工通信标准。也就是说服务器可以主动给客户端推消息,客户端也可以主动向服务器发消息。
通信过程中可互相发送任意格式的数据。
主要是为了解决AJAX 和comet 附带缺陷所引起的问题。
主要特点:
- 推送功能: 服务器直接推送数据, 不需要等待客户端发请求。
- 减少通信量:一直保持连接状态,首部心心小,通信量也减少了。
注意:为了实现websocket通信, 需要用到HTTP 的首部Upgrade 首部字段, 告知服务器通信协议发生了改变,以达到握手的目的。
使用:
js调用webscocket程序接口,以实现全双工通信。
一般情况下,http 使用ws协议 ,https 使用wss协议,且wss下不支持ip地址的写法
- Firefox环境下https不能使用ws连接
- chrome内核版本号低于50的浏览器是不允许https下使用ws链接
- Firefox环境下https下使用wss链接需要安装证书
http : new websocket(‘ws://xxx.xx.com/12012/up’)
https: new websocket(‘wss://xxx.xx.com/12012/up’)
复制代码
其他
1. SSL
1.1 SSL 定义:
- SSL (Secure Sockets Layer 安全套接字协议)
- TLS(Transport Layer Security传输层安全) : SSL 的继任者
SSL和其继任者TLS 是为网络通信提供安全及数据完整性的一种安全协议。
TLS与SSL在传输层与应用层之间对网络连接进行加密。
1.2 SSL 背景介绍:
Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听。
- 一般通用的规格为40 bit的安全标准,美国则已推出128 bit的更高安全标准。只要3.0版本以上的I.E.或Netscape浏览器即可支持SSL。
- 当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
1.3 SSL 协议 分层 :
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
- SSL协议可分为两层:
- SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
- SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL 缺点(目前使用的SSL 3.0 和TLS1.0 )
- 通信慢
- 导致cpu以及内存资源 等硬件消耗,所以慢
解决方法: 使用SSL 加速器
2.中间人攻击(MITM攻击):
2.1 定义:
中间人攻击(Man-in-the-MiddleAttack,简称MITM攻击):是一种间接的入侵攻击,这种攻击模式是通过技术手段将受入侵者控制的一台计算机虚拟防止在网络连接中的两台通信计算机之间,这台计算机就称为 “中间人”。
简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。
总结:
因为http是明文传输不安全,容易被盗取内容和cookie,所以有了加密的HTPPS协议,所以说HTTPS其实就是添加了加密和身份认证的HTTP。
https协议是基于SSL 安全套接字进行加密的。
websocket 其实是另一种协议, 但是他需要HTTP 告知服务器通信协议发生了改变,以达到握手的目的。