在了解http和https的区别之前, 先了解什么是http和https协议。
一 基本概念
HTTP: (hyperText Transfer protocol, 超文本传输协议),是应用最为广泛的一种网络传输协议,所有的从www服务器传输超文本到本地浏览器的文件都必须遵从这个标准。HTTP协议使得浏览器更加高效,使网络传输减少。
HTTPS: 是以安全为目的HTTP通道,在HTTP下增加SSL, HTTPS的安全基础为SSL, 因此加密的详细内容就需要SSL。
HTTPS主要用于:
①建立信息安全通道, 保证数据传输的安全;
②确认网站的真实性。
二 HTTP和HTTPS的区别
HTTP协议传输的数据都是不加密的,也就是明文传输,因此使用HTTP协议传输信息是十分不安全的,为确保隐私数据能够加密传输,于是网景公司设计SSL(Secure Socket Layer)协议用于对HTTP协议传输的数据进行加密,HTTPS由此诞生。
简单说来,HTTPS协议是由SSL+HTTP协议构建的,可进行加密传输、身份验证的网络协议,HTTPS比HTTP协议更加的安全。
HTTP和HTTPS的主要区别如下:
- http的连接简单,是无状态的,即不建立持久的连接;
- https协议需要ca申请证书,一般免费证书较少,因而需要费用;
- http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议;
- http和https使用完全不同的连接方式,使用的端口也不同,http端口号为80,https端口号为443;
HTTP请求过程
一个完整的http请求一般包括7个步骤:
- 建立TCP连接
- web客户端向web服务器发送请求命令;
- 客户端发送请求头信息;
- 服务器应答;
- 服务器应答请求头信息;
- 服务器向浏览器发送数据
- 关闭TCP连接
一个http请求包含四部分:
- HTTP请求方法或动作,GET、POST等;
- 正在请求的URL;
- 请求头,包含一些客户端环境,身份验证等信息,大多数都不是必需的,content-length是必须的;
- 请求体,即请求正文,包含提交的查询字符串信息,表单信息等;
HTTP响应
- 状态码:
1**:信息性状态码,接收的请求正在处理
2**:成功状态码,请求正常处理完毕
3**:重定向状态码,需要进行附加操作已完成请求
4**:客户端错误状态码,服务器无法处理请求
5**:服务器错误状态码,服务器处理请求错误 - 响应头:服务器类型,日期时间,内容类型和长度;
- 响应体:响应正文
TCP三次握手:
标志:SYN/ACK
- 发送端——>数据包(SYN)——>接收端
- 接收端——>数据包(SYN/ACK)——>发送端
- 发送端——>数据包(ACK)——>接收端
TCP四次挥手
- 主动关闭方——TIN(关闭数据传送)——被动关闭方
- 被动关闭方——ACK(确认序号为收到序号+1)——主动关闭方
- 被动关闭方——FIN(关闭数据传送)——主动关闭方
- 主动关闭方——ACK(确认序号为收到序号+1)——被动关闭方
HTTPS的优点
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人攻击,但https仍是现行架构下最安全的解决方案,好处如下:
- 使用HTTP是协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
- https协议是http+http协议构建的可进行加密传输,身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取,改变,确保数据的完整性
- https是现行架构下最安全的解决方案,虽不是完全安全,但大幅增加了中间人攻击的成本
HTTPS的缺点
- https协议在握手阶段比较费时,会使页面加载时间延长,耗电增加
- https连接缓存数不如HTTP高效,会增加数据开销与功耗,甚至已有的安全措施也会受影响
- ssl证书需要钱,功能越强大,证书费用越高,小网站一般不用
- ssl证书需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗
- https协议的加密范围比较有限,ssl证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行