# HTTP传输流程
# 三次握手
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
之所以3次握手是因为通信双方需要明确对方收发能力正常。
第一次握手:发送端发送信息给接收端。确认发送端的发送能力,接收端的接收能力正常。
第二次握手:接收端发送信息给发送端。确认发送端的接收能力正常,接收端的发送能力也正常。
第三次握手:发送端发送信息给接收端。告知一切正常。
第三次握手已经可以传递数据包了。
3次握手用于连接建立阶段。
# 4次挥手
4次挥手又名连接终止协议。
第一次挥手:客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
第二次挥手:服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
第三次挥手:等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
第四次挥手:客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态。
服务器接收到ACK,进入CLOSE,至此接收端已经完成连接的关闭。
发送端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此发送端也完成连接的关闭。
之所以需要4次挥手,是因为服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送。所以会比3次握手多了一次。

HTTP数据传输流程。
# 为什么使用https
用 SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP通信了。与 SSL组合使用的 HTTP 被称为 HTTPS。
通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的 HTTP。
HTTPS 解决了HTTP的这些不足。
- 通信使用明文(不加密),内容可能会被窃听(
https会通过SSL建立安全的通信线路,实现通信加密。) - 不验证通信方的身份,因此有可能遭遇伪装(
https使用了一种被称为证书的手段,可用于确定方。) - 无法证明报文的完整性,所以有可能已遭篡改(
https提供认证和加密处理及摘要功能。)
HTTP+ 加密 + 认证 + 完整性保护 = HTTPS