# HTTPS
# HTTP和HTTPS的区别
HTTPS协议需要到ca申请证书,一般免费证书比较少,因此需要一定的费用
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
HTTP和HTTPS的连接方式不大相同,使用的端口号也不一样,前者是80,后者是443
# HTTPS的工作原理
- 服务器收到客户端请求后,将网站的证书(内含公钥)发送给客户端
- 客户端浏览器收到证书之后,检查证书合法性,产生一个对称密钥,并使用公钥对这个密钥进行加密
- 客户端浏览器将生成的对称密钥发送给服务端
- 至此,通信双方就可以通过对称密钥加密的密文进行通信
# HTTPS的优点
- HTTPS协议可以认证用户和服务器,确保数据发送到正确的目的地
- 数据通过SSL进行加密,可防止传输过程中被窃取、改变,保证数据的完整性
# HTTPS的缺点
- HTTPS协议握手阶段比较费时
- HTTPS连接缓存不如HTTP高效
- SSL证书需要钱,功能越强大,证书费用越高
- SSL证书需要绑定IP,不能在同一IP上绑定多个域名,IP4资源不可能支撑这个消耗
- HTTPS加密范围有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面起不到什么作用
- SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行
# HTTP切换到HTTPS
待实现
# HTTP2.0
# HTTP2.0的优点
- 多路复用:HTTP1.x有个问题叫线端阻塞,即每个TCP连接虽然可以同时发出多个请求(流水线),但是服务器仍然每次只响应一个请求,当数据量大的时候,就会阻碍后面的请求。而HTTP2.0采用了多路复用,多个请求共享一个TCP连接,每个请求对应一个id,服务器可以根据请求的id将请求归属到不同的服务端请求里面。多路复用使得网站优化不需要整合成单个js、css或者使用雪碧图。
- 请求优先级:多路复用带来的问题是在连接共享的基础上导致关键请求被阻塞,因此HTTP2.0允许给每个请求设置优先级,比如浏览器加载首页,html内容应该优先展示,之后才是各种静态资源文件和脚本文件加载
- header压缩:HTTP1.x的header很多时候都是重复多余的,选择合适的压缩算法可以减小包的大小和数量。很多时候一个请求中,请求头会很大,甚至比请求体大,如果浏览器和服务端都维护一份相同的静态表(包含常见的头部名称和值的结合)、动态字典(可以动态添加内容)、支持基于静态的哈夫曼表和哈夫曼编码,这样的话,“:method: GET”只需要一个字符表示,并且在静态字典中查找,"cookie: xxx"也只需要一个字符表示,在动态字典中查找,其余的就可以进行哈夫曼编码。这对网站性能优化也有所改变,同一个连接上产生的请求和响应越多,动态字典积累得越快,头部压缩效果越好,因此不要合并资源,不要散列域名
- 服务端推送:例如普通请求中,客户端请求一个html,服务器返回一个html文件,客户端得到html文件之后发现这个html文件引用到了一个js文件,那么就会再去向服务端请求js文件;而HTTP2.0则是在服务端返回html文件的同时就带上这个js文件,而不是等客户端请求的时候在返回。服务端推送的一个问题就是,如果客户端不是第一次访问服务器,并且本地已经有了缓存,那么推送就是浪费的,因此可以使用cookie进行判断是否进行推送。
- 新的二进制格式:HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮