HTTP与HTTPS请求过程

HTTP与HTTPS请求过程

1、HTTP请求过程

HTTP协议处于网络协议的应用层,底层通过TCP/IP协议支持。HTTP请求基本过程为:
1.域名解析
2.三次握手创建TCP连接
3.服务器响应传输数据
4.四次挥手断开连接
TCP三次握手过程如下

HTTP与HTTPS请求过程_第1张图片
第一次握手:客户端发送SYN报文和客户端初始序列号X,等待服务器确认。
第二次握手:服务器收到报文返回SYN+Ack报文和初始序列号Y
第三次握手:客户端收到服务器返回并返回Seq=X+1和Ack=Y+1
使用报文来解释三次握手比较难懂,为什么TCP连接的建立需要三次握手简单的说:把客户端的发送和接收功能分开算TCP连接的建立必须保证这四样都是可用的:客户端的发送功能、客户端的接收功能、服务器发送功能和服务器接收功能。我们来看三次握手分别做了些什么事:
第一次:客户端发送报文(客户端发送功能是可用的);
第二次:服务器接收到报文并返回。(服务器接收和发送功能是可用的);
第三次:客户端接收到服务器报文并返回。(客户端接收功能是可用的);
一个很常见的问题是为什么建立连接需要三次握手,由上可见是最后一次握手是为了保证客户端仍可以接收报文。TCP连接时有可能会出现这种情况:客户端第一次请求连接的报文因为各种原因阻塞在路上了,由于超时客户端放弃了这次连接,但一段时间过后阻塞的报文被转到服务器手上了,服务器如果直接第二次握手然后发送信息的话由于客户端放弃连接无法接收会导致此次请求失败。
三次握手之后TCP连接建立,开始传输数据,参数结束之后需要四次挥手断开连接,四次挥手内容如下:
avatar
既然四次握手是为了保证四个发送和接收功能正常那四次挥手必定也是保证这四个功能正确断开。
第一次挥手:主动方发送断开请求。(发送断开请求之后主动方不会再发送任何数据,这次挥手后主动方发送功能关闭但仍能接收请求)
第二次挥手:被动方收到断开请求,并返回我知道了。(被动方收到断开请求后知道你不会再发数据了随即关闭自己的接收数据功能,此时被动方可能还有数据没传输完成)
第三次挥手:被动方继续传输未完成的数据,结束后发送我也不再发送数据的请求。(被动方此时关闭发送数据功能)
第四次挥手:主动方收到请求,返回可以断开(此时主动方关闭接收数据功能)
注意上面说的接收数据功能和发送数据功能都只针对用户数据而言,协议数据不包括在内。
由于第二次和第三次挥手都是被动方发送的,显然当被动方收到断开请求时如果没有剩余数据需要传输是可以将第二次和第三次挥手放在一起的。此时只需要三次挥手即可断开连接。
第四次挥手的作用是保证被动方发送的断开请求送达到了主动方,如果第三次挥手后被动方就完全断开了但报文因为网络原因而没到达主动方时主动方会一直在傻傻的等而不能关闭接收功能。
第四次挥手后需要等待2MSL才能关闭连接原因有二:1、若客户端发送的第四次挥手信息未被服务端收到,服务端会超时重发第三次挥手信息,此时客户端仍处于等待状态可以收到信息后重新第四次挥手。2、防止有残存的失效报文存在于网络上。如果本次连接中有报文因阻塞残存于网络上在关闭连接后再到达会干扰其他连接,客户端发送最后一次挥手后等待2MSL(2个报文最大存活时长)可以保证此次连接的所有报文都消失于网路上。

HTTPS请求过程

看上面的HTTP请求过程容易发现,HTTP传输时数据都是在网络中裸奔的,一旦被第三人截获则所有内容都可以被看光甚至被修改,这对于一些金融系统是不可忍受的。因此超文本传输安全协议的出现迫在眉睫。
HTTPS是基于HTTP的,不同的是他在TCP/IP协议上面又新加了一层SSL

SSL层是为了保证HTTPS传输过程的安全性的。保证的方式在于他传输数据之前先传输一套对称密钥,然后通过这个对称密钥来加密一个key,再使用这个key来加密需要传输的数据,以此达到第三人不可解密和更改的目的。机密过程如下:
avatar
1、客户端发送请求https连接。
2、服务器返回加密公钥,通常是SSL证书。
3、客户端从这个SSL证书解析出公钥,并随机生成一个key,通过公钥加密这个key发送给服务器(这一步是安全的因为只有服务器才有私钥能读出这个key)。
4、服务器通过私钥解密出key。
5、客户端使用这个key来加密需要传输的数据。
6、服务器使用key来解析数据。
简单的来说SSL加密的方式是使用一个密钥来加密另一个密钥(key),在使用被加密的密钥来加密数据。
这样的做法固然保证了安全性,但每次连接时都需要使用密钥加密,导致请求会需要额外的开销,同时服务器第一次返回的公钥的可靠性需要第三方来保证,通常是购买SSL证书。这也会造成额外的经济开销。

你可能感兴趣的:(其他)