1.HTTP和HTTPS的基本概念
HTTP:是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
2.HTTPS VS HTTP
- https更安全
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。 - https需要申请证书
https协议需要到ca申请证书,一般免费证书很少,需要交费,费用大概与.COM域名差不多,每年需要交大约几十元的费用。而常见的http协议则没有这一项; - 端口不同
http使用的是大家最常见的80端口,而https连接使用的是443端口; - 状态不同
http的连接很简单,是无状态的。而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
3.多路复用的原理解析
HTTP/1.1协议的请求-响应模型大家都是熟悉的,我们用“HTTP消息”来表示一个请求-响应的过程,那么HTTP/1.1中的消息是“管道串形化”的:只有等一个消息完成之后,才能进行下一条消息;而HTTP/2中多个消息交织在了一起,这无疑提高了“通信”的效率。这就是多路复用:在一个HTTP的连接上,多路“HTTP消息”同时工作。
4.HTTP报文格式
HTTP请求报文格式如下:
5. HTTP通信传输过程
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话**,然后利用网站的公钥将会话**加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话**。
(6)Web服务器利用会话**加密与客户端之间的通信。
6.TCP三次握手和四次挥手
TCP协议保证可靠性是通过三次与目标设备的通信来确定数据包发送成功。
TCP三次握手
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。这样就保证了,每次传送数据都会准确到达目标设备了。
TCP四次挥手
当数据包发送完毕需要断开连接的时候,就需要TCP的四次挥手来保证链接的合理断开。
1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
2.服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
3.服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
4.客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
TCP为什么建立链接是三次,关闭链接是四次呢?
两次和四次都会出现问题,三次就刚刚好,希望这张图能够让你更好的理解为什么是三次握手。
四次挥手的理解
先看下面这个场景:
A:B 啊,我不想玩了。
B:哦,你不想玩了啊,我知道了。
这个时候,还只是 A 不想玩了,即 A 不会再发送数据,但是 B 不能在 ACK 的时候(用于对收到的数据进行确认,所确认的数据由确认***表示)直接关闭,很有可能 A 是发完了最后的数据就准备不玩了,但是 B 还没做完自己的事情,还是可以发送数据的,所以称为半关闭的状态。
这个时候 A 可以选择不再接收数据了,也可以选择最后再接收一段数据,等待 B 也主动关闭。
B:A 啊,好吧,我也不玩了,拜拜。
A:好的,拜拜。
这就是一个完整的关闭连接,在这个关闭的过程中,一共说了四句话,我们也称之为四次挥手。跟建立连接一样,断开时也是用状态来表示
7.TCP/IP 通信传输
发送端从应用层往下走,接收端从应用层往上走。
8.HTTP的状态码
9.HTTP方法
10.HTTP接口防刷方法
(1):网关控制流量洪峰,对在一个时间段内出现流量异常,可以拒绝请求(参考个人博客文章 https://mp.csdn.net/postedit/81672222)
(2):源ip请求个数限制。对请求来源的ip请求个数做限制
(3):http请求头信息校验;(例如host,User-Agent,Referer)
(4):对用户唯一身份uid进行限制和校验。例如基本的长度,组合方式,甚至有效性进行判断。或者uid具有一定的时效性
(5):前后端协议采用二进制方式进行交互或者协议采用签名机制
(6):人机验证,验证码,短信验证码,滑动图片形式,12306形式