http/https
HTTP
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;HTTP(超文本传输协议)是一个无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
HTTP常用方法:
GET:用于请求访问已经被URI识别的资源,可以通过URL传参给服务器。
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,但不返回报文主体,用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
Get与post的不同:
1.最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
2.get能被缓存,可收藏为书签,post不行。
3.get受url的长度限制(2048个字符),post没有,所以传文件用post
4.get不安全,能被看到,post安全
常见状态码:
1×× : 请求处理中,请求已被接受,正在处理
2×× : 请求成功,请求被成功处理
200 OK
3×× : 重定向,要完成请求必须进行进一步处理
301 : 永久性转移
302 :暂时性转移
304 : 已缓存
4×× : 客户端错误,请求不合法
400:Bad Request,请求有语法问题
403:拒绝请求
404:客户端所访问的页面不存在
5×× : 服务器端错误,服务器不能处理合法请求
500 :服务器内部错误
503 : 服务不可用,稍等
HTTPS
Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
HTTPS就是HTTP加上SSL加密处理(一般是SSL安全通信线路)+认证+完整性保护
使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
① 证书验证阶段
(1)客户端向服务器发起HTTPS请求,连接到服务器的443端口
(2)服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
(3)服务器将自己的公钥发送给客户端。其实是发证书,证书是CA颁发的,用算法计算信息摘要,在用CA的密钥加密,变成数字签名。(证书=公钥+申请者与颁发者信息+签名;)
(4)客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现证书有问题,那么HTTPS传输就无法继续。采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认·证书的合法性,即公钥合法,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,即客户端密钥。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
② 数据传输阶段
(1)客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
(2)服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
(3)然后服务器将加密后的密文发送给客户端
(4)客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
对称加密:加密和解密使用同一个密钥。
优点:算法公开,计算量小,加密速度快,加密效率高
缺点:双方使用相同的钥匙,安全性得不到保证,双方要维护大量的密钥,维护成本大
非对称加密:
非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
公开密钥和私有密钥是一对,加密和解密花费时间长、速度慢
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
不同
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;