Http协议和Https协议
Http协议
超文本传输协议,是一个基于请求与响应的,无状态的应用层协议,常基于IP/TCP传输数据,互联网应用上最为防范广泛的一种网络协议,所有的网络文件都必须遵守这个标椎。
Http报文格式
Http方法
get和put方法的区别
1、缓存:get方法是获取一个资源,可以反复的读取,这时就可以对请求到的数据缓存,而post是提交一个form表单,点击提交按钮会发出一个post请求让服务器做某一件事,返回这件事成功的一个页面,但是这个页面是不能缓存的。
2、数据长度:GET和POST都可以使用URL传递数据,GET数据有长度限制是指URL的长度限制,Http协议并没有对URL长度没有明确的规定,这些都是服务器、客户端/浏览器进行的限制。
3、数据类型:get仅仅支持Ascii编码,post没有限制
4、请求数据:get请求的数据都在url中,post可以在请求体中也可以在url中
5、安全性:因为POST用body传输数据,而GET用url传输,更加容易看到数据,这个安全仅仅是从数据可见不可见。但是我们知道http本身就是明文协议,本身就是不安全的。为了避免传输数据被窃取,采用https协议。
http协议特点
1、无状态:协议对客户端没有状态存储,对事务处理没有记忆功能,访问一个网站需要反复进行登录操作、
2、无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
3、基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4、简单快速、灵活
5、明文的通信方式,请求和响应不会对通信方进行确认、无法保护数据的完整性
我们知道HTTP的传输是明文传输,是不安全的,这个数据信息会被中间人截获或者篡改这个数据信息。对于这个问题,我们可以进行加密
对称加密:加密的时候用的算法和解密的时候用的算法一样
客户端和服务端可以事先约定好一种加密方式,并且约定一个随机生成的**(加密和解密使用同一个**)这样在后面的通信过程中,都使用**对数据信息进行加密,解密方也同样使用**对数据信息进行解密。但是倘若在约定**的过程中,这个**被中间人截获,那么在中间人也可以根据截获的**对数据进行解密。
非对称加密:加密使用的算法和解密使用的算法不一致
在这个**中,包含一个公钥一个私钥,数据信息可以用公钥进行加密,用私钥进行解密;也可以通过私钥进行加密,公钥进行解密。
客户端向服务端发送一个公钥,当服务端收到这个公钥之后,服务端自己生成一个对称加密的**,然后获取到的公钥对自己生成的**进行加密,将这个加密的**发送给客户端,客户端通过自己的私钥进行解密,以后就可以利用这个**进行数据传输。
这样看来时候是安全的,但是倘若中间人截获了客户端发送的公钥时,它也可以自己生成公钥和私钥,然后把自己的公钥发送给服务端。也就相当于中间人在这个过程中充当了中间代理的身份。
这种方式也是不安全的
Https协议
第三方证书认证机构CA
证书,其实就是一个一对公钥和私钥。传送证书,这个证书其实就是公钥,包含了很多的信息(证书的颁发机构,服务器端的公钥服务端的域名信息等等)
客户端向服务端进行请求,服务端进行响应,并且发送自己证书,客户端解析证书,会验证这个证书是否有效,如果没有问题,客户端就利用机构的公钥,解密出服务端的公钥,客户端生成自己的对称加密的**,并且用服务端的**加密自己生成的**,发送给服务端,服务端用自己的私钥解密出客户端的**,以后的通信过程就利用**对数据进行加密解密
验证证书的安全:
1、当客户端接收到这个证书之后,会使用本地配置的权威机构的公钥对证书进行解密,得到服务端公钥和证书的数字签名,数字签名经过CA公钥解密得到证书的信息摘要
2、通过证书签名的方法计算一下当前证书的信息摘要,如果和收到的信息摘要相同,表示证书是正确的,不是被篡改过的。即使中间人有机构的公钥,可以解析证书并且篡改完成之后,需要重新加密但是它没有机构的私钥,无法完成加密。
HTTPS协议就是在HTTP协议的基础上增加了SSL安全层,通过这一层对数据进行加密,SSL层就是进行认证的