1 前言
细心的朋友可能会发现,在我们浏览网页的时候,有些网站的地址栏是 http://开头的,有些往网站是 https://开头的。
可能大家也会有各种各样的疑惑,为什么会这样?两者都有哪些区别呢?今天我们就主要来看一下HTTP和HTTPS的区别。
2 HTTP介绍
2.1 什么是HTTP?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议也是目前互联网中用的最频繁、最多的协议。
2.2 HTTP发展历史
时间 版本 特点 发展现状
1991年 0.9 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
1996年 1.0 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作为标准
1997年 1.1 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
2015年 2 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场
注意:最后一个版本是HTTP/2,不是HTTP/2.0,因为标准委员会不打算发布子版本,也就是说,下一个HTTP的版本将会是从3开始。
2.3 HTTP工作流程
建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接
客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
服务器向客户端发送应答头信息
服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
3 HTTPS介绍
3.1 什么是HTTPS
HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。 HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
简单来说就是,HTTPS是HTTP的安全加强版,因为它多了一层SSL来加密。
3.2 HTTPS工作流程
客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
Web服务器利用自己的私钥解密出会话密钥。
Web服务器利用会话密钥加密与客户端之间的通信。
4 其他
通过前面的介绍可以看到,HTTPS是要比HTTP安全,但是任何事物都是有两面性的。安全性加强的同时也会有其它负面影响。
1、HTTP使用TCP三次握手建立连接,客户端和服务器需要交换三个包,但是HTTPS除了TCP的三个包还要加上SSL的九个包,总共12个包。也就是说HTTPS要比HTTP协议消耗更多的流量(我觉得这个问题完全可以忽略)。
2、网络延迟。据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电,此外,HTTPS协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。
3、SSL整数需要花钱购买,而且不便宜。当然阿里云有免费的证书可以申请,但是有效期只有一年,到期后再次申请。