http/https都是基于tcp/ip上的一种应用层传输协议。
组成
http由URL,header和body组成。
- URL
其中URL包含目标地址和请求方法,请求参数
- header
header包含一些配置参数,其中都是使用键值对传递,每一对之间需要换行。
传递格式为:
Content-Encoding: gzip\r\n
- body
对传递的数据的格式没有具体要求。一般使用者自定义数据格式。
get和post的区别
对于在浏览器之间使用时候,二者却别如下:
- post请求会发送两次,第一次将header发送给服务,如果返回200,才会继续发送body,但不是所有浏览器都是这样,Firefox就只发送一次。
- get会给浏览器产生缓冲,URL后的参数可以被看到,不安全,post不会。
对于在移动设备使用,我们只是单纯的访问API接口时,本质上两者并无差异,我们可以使用post时候,在URL后边加上参数,也可以使用get时候,将一些请求数据放在body中。
不过日常使用中,可能会有一些规范,请求API,为了获取某些单一数据请求数据单一且少的情况下使用get,其他情况使用post。
https
https比http多了一层tls/ssl认证,这样可以保证传输过程中的数据是加过密的。
HTTPS也分为单项认证和双向认证。
- 单向认证
单向认证是客户端验证服务器的可靠性
1. 客户端把自己的SSL协议版本号,加密算法种类,随机数等发给服务端
2. 服务端给客户端返回自己的证书
3. 客户端使用证书验证服务端合法性[证书是否过期,颁发者是否有效,签名是否一致等信息]
4. 验证通过后,客户端把自己支持的所有对称加密方式发送给服务端
5. 服务端选择最高级加密方案返回给客户端
6. 客户端生成对应加密密钥随机数,并使用服务端证书公钥加密发送给服务端
7. 服务端使用私钥解密获取到密钥,之后的会话中都会使用该密钥来进行加解密。
- 双向认证
双向认证是客户端和服务器互相验证对方的可靠性
http和https区别
- http由于不需要认证连接,传输时间快,https由于需要连接认证,传输时间慢
- https传输的数据都是密文,而http是明文
- https需要在服务端配置证书,并且该证书一般都是需要花钱的,需要成本。