什么是HTTP?
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
发展历史:
版本 产生时间 内容 发展现状
HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
HTTP/1.0 1996年 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作为标准
HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场
HTTP特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
- 简单快速、灵活
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
http2.0的一些解决策略:
- 通过Cookie/Session/useragent技术 其中 cookie (webView 有问题,使用共享cookie)
- HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
-
head信息压:进行gzip 压缩
-
服务器自推送 类似于socket
-
多功: 复用http, 多个请求同时响应
Method
POST、GET、PUT、HEAD、DELETE、OPTIONS、TRACE、CPPNNECT
状态码
- 1xx 信息状态码 接受的请求正在处理
- 2xx 成功 请求正常处理完毕
- 3xx 重定向 需要进行附加操作已完成请求
- 4xx 客户端错误 服务端无法处理请求
- 5xx 服务器错误 服务器处理请求出错
http缺点
1.通讯使用明文(不加密),内容可能会被窃听
解决方案:加密 通讯加密SSL 内容加密 base64 或MD5加密
2.不验证通讯方身份,因此可能遭遇伪装 DOS攻击(不断攻击)
解决方案:无法确认服务端,无法确认客户端,是否有访问权限 证书 CA 或自签证书
3.无法验证报文的完整性,有可能已遭遇篡改
解决方案:中间人攻击 使用https
HTTPS
HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方
加密方式
- 共享秘钥加密(对称加密)
- 使用两把秘钥的公开秘钥加密(非对称加密)
- HTTPS采用混合加密机制 —在交换秘钥环节使用公开秘钥加密方式,之后建立通讯交换保温阶段则使用共享秘钥加密
HTTPS 缺点
- 证书麻烦,贵
- 相对于HTTP速度慢
- 消耗内存资源多
单项认证
1.客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息
2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数 等信息,同事也返回服务器端的证书,即公钥证书
3.客户端使用服务端返回的信息证书服务器的合法性
3.1证书事发后过期
3.2发行服务器证书的CA是否可靠
3.3返回的公钥是否能正确解开返回证书中的数字签名
3.4服务器证书上的域名是否和服务器的实际域名相匹配
3.5验证通过后,将继续进行通讯,否则,终止通信
4.客户端向服务端发送自己所支持的对称加密房的方案,供服务器端进行选择
5.服务器端在客户端提供的加密方案中选择加密成都最高的加密方式
6.将加密方的方案通过,使用之前获取到的公钥进行加密,返回给客户端
7.客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后产生该加密方式的随机
码,用作加密过程中的秘钥,使用之前从服务端证书中获取到的公钥进行加密,发送给服务端
8.服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的秘钥,在接下来会话中服务器和客户端将
会使用该密码进行对称加密,保证通讯过程中的信息安全。
双向认证
1.客户端向服务端发送SSL协议号,版本号、加密算法种类、随机数、等信息
2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息 同事也返回服务器端的证书,即公钥证书
3.客户端使用服务端返回的信息验证服务器的合法性,包括:
3.1证书是否过期
3.2发行服务器证书的CA是否可靠
3.3返回的公钥是否能正确解开返回证书中的数字签名
3.4服务器证书上的域名是否和服务器的实际域名相匹配
3.5验证后,将继续进行通信,否则,终止通信
4.服务端要求客户端发送客户端的证书,客户端将自己的证书发送给服务端
5.验证客户端的证书,通过验证后,会获得客户端的公钥
6.客户端向服务端发送自己所支持的加密方案,共服务端进行选择
7.服务端在客户端提供的加密方案职工选择加密成都最高的加密方式
8.将加密方案通过使用之前获取的公钥进行加密,返回给客户端
9.客户端收到服务端返回的方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码
用做加密过程中的秘钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端
10.服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的秘钥,在接下来的会话中,服务器和
客户端将会使用该密码进行对称加密,保证通信过程中的信息安全