HTTP
超文本传输协议(HyperText Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。
工作原理
协议采用了请求/响应模型,由客户端向服务器发送一个请求报文,然后服务端返回一个响应报文。
报文内容
请求报文包含以下内容:
请求的方法;
URL;
协议版本;
请求头部;
请求数据。
响应报文包含以下内容:
协议的版本;
成功或者错误代码;
服务器信息;
响应头部;
响应数据。
请求/响应步骤
客户端连接 Web 服务器
客户端发送 HTTP 请求
客户端向 Web 服务器发送一个文本的请求报文。
一个请求报文由请求行、请求头部、空行和请求数据 4 部分组成。
服务端接收请求并返回 HTTP 响应
Web 服务器解析请求,定位请求资源。服务器将资源复本写到 TCP 套接字,由客户端读取。
一个响应由状态行、响应头部、空行和响应数据 4 部分组成。
释放 TCP 连接
若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接。
若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
客户端浏览器解析 HTML 内容
HTTP 的五大特点
支持C/S模式。
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有
GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由
Content-Type加以标记。无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过
Connection: Keep-Alive实现长连接无状态:
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 的缺点
通信使用明文(不加密),内容可能会被窃听。
不验证通信方的身份,因此有可能遭遇伪装。
无法证明报文的完整性,所以有可能已遭篡改。
HTTPS
加密方式
加密方式有两种:对称加密和非对称加密
对称加密:加密和解密使用的密钥是相同的,这种加密方式的安全性在于密钥是否做好保密;
非对称加密:加密和解密使用的密钥是不相同的,两个密钥分别是公钥和私钥,公钥用于加密(可公开),私钥用于解密(不可公开)
区别:对称加密算法相比非对称加密算法来说,效率要高得多,性能也好,所以交互的场景下多用对称加密。
证书
由权威部门颁发的称为证书(Certificate)证书包含的内容
公钥
证书所有者
证书的发布机构
证书有效期
签名算法
证书的指纹和计算指纹所使用的指纹算法
……
工作模式
建立 SSL 连接
SSL四次握手第一次握手
Client 发送
Client Hello(包含一个随机数 N1)报文开始 SSL 通信。报文中包含 Client 支持的 SSL 的指定版本、 加密组件(Cipher Suite) 列表。第二次握手
Server 可进行 SSL 通信时, 会以
Server Hello(包含一个随机数 N2)报文作为应答。 和 Client 一样, 在报文中包含 SSL 版本以及加密组件。 Server 的加密组件内容是从接收到的客户端加密组件内筛选出来的。然后 Server 发送
Certificate报文。 报文中包含公开的证书。最后 Server 发送
Server Hello Done报文通知 Client, 最初阶段的 SSL 握手协商部分结束。
第三次握手(证书校验)
Client 以
Client Key Exchange报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串(N3)。 该报文已用步骤 3 中的公开的证书进行加密(N1+N2+N3 => 对称密钥);Server 同时进行该加密计算步骤。接着 Client 继续发送
Change Cipher Spec报文。 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret 加密。Client 发送消息进行加密传输测试(Encrypted Handshake Message)
Client 发送
Finished报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准。
第四次握手
Server 同样发送
Change Cipher Spec报文。Server 同样发送
Encrypted Handshake Message报文。Server 同样发送
Finished报文。
整体流程
交换协议版本号 => 选择一个通信双方都支持的加密方式 => 对两端实现身份验证 =>
建立 TCP 连接,发送 HTTP 请求
Server 和 Client 的
Finished报文交换完成后,通信会受到 SSL 的保护,接下来开始应用层协议的通信,发送 HTTP 请求。应用层协议通信,发送 HTTP 响应。
断开连接
Client 主动断开连接。Client 发送
close_notify报文。然后 Client 发送
TCP FIN报文来关闭与 TCP 的通信。
SSL 的缺点
通信慢:和 HTTP 相比,网络负载会变慢 2~100 倍(除去和 TCP 连接、 发送 HTTP 请求 • 响应以外, 还必须进行 SSL 通信,因此整体上处理通信量不可避免会增加)。
处理速度慢:由于 SSL 必须进行加密处理,要大量消耗 CPU 及内存等资源, 导致处理速度变慢。在服务器和客户端都需要进行加密和解密的运算处理。 因此从结果上讲, 比起 HTTP 会更多地消耗服务器和客户端的硬件资源, 导致负载增强。
评论