定义
HTTP(Hypertext Transfer Protocol)即超文本传输协议,是可靠的、无状态、cs模型、基于文本的应用层协议。
- 可靠,基于TCP协议。
- 无状态,每个HTTP请求都是独立的,不依赖于上下文,对请求报文和响应报文不做持久化处理。
- cs模型,基于函数调用的思想,一个请求报文要对应一个响应报文。
- 文本协议,报文头信息为字符串。
超文本:一种将文本以及其他形式的信息(如图像、音频、视频等)以非线性的方式组织起来的文本形式,简单来说就是有各种形式信息中有超链接(Hyperlink)。
HTTP请求报文
- method,方法,客户端希望服务端对资源执行的操作。
幂等性: 无论操作多少次,每次的结果都是相同的
GET,请求从服务器获取资源(静态文本、页面、图片、视频),具备幂等性。POST,向URI指定的资源提交数据,数据存放在报文体当中,不具备幂等性。
- request-URL,命名所请求资源的完整URL
- version,版本,报文所使用的HTTP版本
- 1.0,短连接,每发起一个请求都要新建和销毁TCP连接,增加了开销。
- 1.1,长连接,只要有任意一端没有明确提出断开连接,就保持TCP连接状态;支持管道传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
- 2.0,头部压缩,使用专门的压缩算法(如HPACK)来减少头部数据报的大小;多路复用,允许一个连接上同时发送多个请求和接受多个响应;采用二进制格式传输数据,头信息和数据体都是二进制,统称为帧;
- 3.0,基于QUIC协议,避免TCP连接对其他HTTP请求的阻塞。QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。
- headers,HTTP首部字段,向请求报文和响应报文中添加了一些附加信息,本质上是一些key/value对的列表。
- entity-body,报文体
HTTP响应报文
- status,状态码
- reason-phrase,原因短语,解释状态码
HTTPS协议
HTTP的缺点
HTTP由于是明文传输的,在传输的过程中可以直接获取传输的内容,这也导致了它的不安全性。
- 内容被窃听,账号密码泄露。
- 没有身份验证,访问虚假网站。
- 报文可被篡改,网页被植入垃圾广告。
HTTPS(Hypertext Transfer Protocol Secure)即超文本传输安全协议,是在 HTTP 协议基础上加入 SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议,通过加密机制、摘要算法和数字签名、身份认证机制来确保数据传输的安全性和完整性。
加密机制
为了保证传输的安全性,HTTPS采用混合加密的加密机制。
- 在通信开始阶段,客户端和服务端首先使用非对称加密进行密钥交换。服务器将自己的公钥发给客户端,客户端接收到这个公钥,生成一个随机的对称加密密钥,然后使用服务器的公钥来对明文(对称加密密钥)进行加密(密文),因为只有服务器有对应的私钥,所以只有服务器才能对密文进行解密,获取对称加密密钥。
- 对称加密密钥加密和解密的密钥是相同的,所以双方可以使用这个对称加密密钥进行后续的数据加密和解密。
摘要算法和数字签名
为了保证数据的完整性,HTTPS采用摘要算法(哈希函数)来计算内容的哈希值,在传输的过程中会把哈希值一并传输,对端会对内容进行摘要算法计算并验证哈希值。
摘要算法可以确保内容不被篡改,但是无法确保内容的来源是否来自于服务器,可能存在中间人将内容+哈希值一并替换了,所以需要身份验证来确认消息的来源。
身份验证
- 数字证书,服务器通过数字证书来向客户端证明自己的身份。数字证书是由CA(数字证书认证机构)颁发的,包含服务器的公钥和CA的数字签名。
- 证书验证,客户端收到服务器的数字证书后,使用CA的公钥确认服务器数字证书的真实性,验证成功后从数字证书中获取服务器公钥来对明文进行加密。
SSL/TLS协议
基本流程
- 客户端向服务器获取并验证公钥
- 双方协商产生会话密钥(对称加密密钥)
- 双方采用会话密钥进行加密通信
详细流程
基于RSA算法的TLS握手过程
- ClinetHello,向服务器发起加密通信请求,发送内容包括TLS协议版本、产生的随机数(Client Random)、支持的密码套件列表。
- ServerHello,收到请求后进行响应,发送内容包括TLS协议版本确认、产生的随机数(Server Random)、支持的密码套件列表、服务器的数字证书。
- 客户端回应,验证CA公钥验证数字证书,验证成功后取出服务器公钥来加密明文,发送内容包括随机数(pre-master key)、加密通信算法改变通知(改用会话密钥)、客户端握手结束通知。
- 服务器的最后回应,服务器收到客户端的第三个随机数后,通过协商的加密算法形成会话密钥,发送内容包括加密算法改变通知、服务端握手结束通知。
TLS握手阶段结束,接下来客户端和服务端的通信采用HTTP协议,只不过会用会话密钥加密发送内容。
RESTful api
REST(Resource Representational State Transfer,资源在网络中以某种形式进行状态转移)
- Resource,资源,即数据。
- Representational,表现形式,如JSON、XML等。
- State Transfer,状态转移,通过HTTP的动词(GET、PUT、POST、DELETE)来实现。
REST的约束
- cs架构
- 资源抽象,用URL来标识网络中的资源。
- 统一接口,用一组统一的操作接口来访问和操作资源,这些接口基于HTTP协议的方法来实现。
- GET,用于获取资源的表现形式
- PUT,用于更新资源
- POST,用于添加新资源
- DELETE,用于删除资源
- 无状态性,服务器在处理客户端请求时,不会依赖之前的状态信息,每个请求都包含了足够的信息让服务器进行处理。
- 可缓存性
- 分层系统
REST的优点
- 前后端分离