HTTP-相关
HTTP 发展史

HTTP不同版本
HTTP(HyperText Transfer Protocol)是一种应用层协议,用于客户端和服务器之间的通信。下面列举了HTTP协议的常用版本:
-
HTTP/0.9:最初的HTTP协议,只支持GET方法,没有请求头和请求体,响应中只有实体内容。
-
HTTP/1.0:增加了多种请求方法,如POST、HEAD和OPTIONS,也支持请求头和请求体,响应头中增加了状态码和其他元信息。
-
HTTP/1.1:在1.0的基础上增加了持久连接、管线化、分块传输编码等新特性,提高了网络传输效率。
-
HTTP/2:在1.1的基础上增加了二进制协议、多路复用、服务器推送等新特性,进一步提高了网络传输效率。
-
HTTP/3:使用QUIC协议作为传输层协议,支持快速建立连接、安全性增强、支持多路复用等特性,进一步提高了网络传输效率。
需要注意的是,虽然HTTP协议的版本不同,但是它们的基本原理和语法结构都相似,因此大部分HTTP应用程序都能够兼容多个版本的HTTP协议。
有了HTTP 为什么还要有RPC呢
HTTP和RPC都是应用层协议,但它们的设计目的和适用场景不同。虽然HTTP可以用于服务之间的通信,但在实际应用中,RPC比HTTP更适合服务之间的调用,原因如下:
-
性能更高:HTTP协议需要进行文本编码、解码和处理,而RPC协议使用二进制编码,在传输效率和性能上比HTTP更高。
-
更好的序列化支持:RPC框架通常提供多种序列化/反序列化方式,如ProtoBuf、Thrift、Avro等,可以根据实际业务需求自由选择。
-
更好的协议支持:RPC框架通常支持多种协议,如TCP、UDP、HTTP、Websocket等,可以在不同的场景下选择不同的协议。
-
更好的远程调用支持:RPC框架通常支持异步调用和回调机制,可以提高调用效率。
-
更好的可扩展性:RPC框架通常提供服务治理、负载均衡、容错等机制,可以方便地进行服务的扩展和管理。
当然,在一些简单的场景下,使用HTTP也可以满足需求。但是在跨语言、高并发、大规模分布式系统等场景下,RPC更为合适。另外,对于一些需要更为严格的消息传递协议、更高效的二进制序列化和反序列化、更好的服务治理等场景,使用RPC是更好的选择。
HTTPS
HTTPS(Hyper Text Transfer Protocol Secure)是HTTP协议的安全版本,通过使用SSL或TLS协议对HTTP进行加密来保证数据传输的安全性和完整性。HTTPS协议在数据传输过程中使用公钥加密对称密钥,然后使用对称密钥对数据进行加密。这样可以防止数据被窃听、篡改和伪造。
HTTPS的加密过程主要包括以下步骤:
-
客户端向服务器发送HTTPS请求。
-
服务器返回公钥证书。
-
客户端验证证书,获取服务器公钥。
-
客户端生成对称密钥,使用服务器公钥加密,并发送给服务器。
-
服务器使用私钥解密,获取对称密钥。
-
双方使用对称密钥加密和解密数据。
相比HTTP协议,HTTPS协议具有以下优势:
-
数据传输安全。HTTPS使用加密技术保证数据传输过程的安全性,可以防止数据被窃听、篡改和伪造。
-
身份验证。HTTPS使用数字证书对服务器和客户端进行身份验证,可以防止中间人攻击和欺骗。
-
信任度高。HTTPS使用数字证书颁发机构(CA)对证书进行签名,可以保证证书的真实性和可信度。
因此,对于需要保证数据传输安全性和身份验证的应用场景,使用HTTPS协议进行数据传输是非常必要和重要的。
HTTP2
HTTP/2是新一代HTTP协议,它在HTTP/1.1的基础上提供了更多的特性,如二进制协议、多路复用、服务器推送等,可以提高网络传输效率,提升客户端的性能体验。相比于HTTP/1.1协议,HTTP/2不仅可以减少网络延迟,还可以保持长连接,避免HTTP请求的重复建立和拆除。
目前,很多互联网公司(如Google、Facebook)已经在部分应用中开始使用HTTP/2协议,但并不是所有的应用都采用HTTP/2协议。要使用HTTP/2协议,需要满足以下条件:
-
客户端和服务器都支持HTTP/2协议。
-
客户端和服务器之间的网络传输必须采用TLS/SSL协议加密。
如果以上条件都满足,就可以通过升级HTTP/1.1协议到HTTP/2协议来提高应用的性能和用户体验。
谷歌gRPC
gRPC是一个基于HTTP/2协议的高性能、开源的远程过程调用(RPC)框架,由Google开发和维护。gRPC使用Protocol Buffers作为数据传输格式,同时支持多种编程语言,包括Java、C++、Python、Go等。
在HTTP/2的基础上,gRPC提供了很多额外的特性,比如支持多种负载类型(如protobuf、JSON等)、流控制、头部压缩、单一TCP连接多路复用等。这些特性使gRPC能够在高并发、低延迟的应用场景下发挥出色的性能。
另外,gRPC还提供了自动生成客户端和服务端代码的工具,简化了应用的开发和维护。与传统的RESTful API相比,gRPC能够更加高效地进行数据传输和服务调用,因此在微服务架构中得到了广泛的应用。
HTTP3
HTTP/3是一种使用QUIC(Quick UDP Internet Connections)协议作为传输层协议的HTTP协议版本。QUIC是一种基于UDP协议的传输层协议,由Google开发,在网络传输效率、安全性和可靠性方面都有很多的优势。
目前,HTTP/3还处于标准制定阶段,但是一些企业的应用已经开始逐步支持了HTTP/3和QUIC协议。例如,Google的Chrome浏览器支持HTTP/3协议,并且已经在一些Google网站上开始使用HTTP/3协议。另外,Facebook也在其移动应用中开始逐步支持HTTP/3协议。
由于HTTP/3和QUIC协议都比较新,现有的网络设备和服务都可能不支持这些协议。因此,在应用中使用HTTP/3和QUIC协议需要谨慎考虑,并在适当的情况下做好兼容性处理。
HTTP3为什么抛弃不适用TCP呢
HTTP/3抛弃了TCP协议,主要是因为TCP协议本身存在一些问题,例如:
-
握手过程较为耗时。TCP在建立连接时需要进行三次握手,这会增加网络延迟。
-
拥塞控制不够灵活。TCP使用拥塞窗口控制算法来避免网络拥塞,但是这个算法缺乏对高延迟和丢包的适应性。
-
不支持多路复用。TCP是一种面向连接的协议,每个连接只能传输一个数据流,无法实现多路复用,这会影响网络传输的效率。
相比之下,QUIC协议则在这些方面都有很大的优势。QUIC使用UDP协议作为传输层协议,可以在握手阶段完成连接建立和加密,减少网络延迟;拥塞控制算法更加灵活,可以根据网络状况进行实时调整;同时,QUIC支持单个连接上的多个数据流,可以实现多路复用,提高网络传输效率。
因此,HTTP/3选择使用QUIC作为传输层协议,可以解决TCP协议存在的一些问题,提高网络传输效率和性能。同时,QUIC还提供了更好的安全性和可靠性,能够保护网络通信不受中间人攻击和干扰。
HTTP常见字段
在 HTTP 协议中,有许多字段用于表示请求和响应的各种属性和元数据。以下是一些常见的 HTTP 字段:
-
请求行字段(Request Line Fields):
- 方法(Method):表示请求的操作类型,如 GET、POST、PUT、DELETE 等。
- URL(Uniform Resource Locator):表示请求的资源的位置。
- 版本(Version):表示使用的 HTTP 协议版本,如 HTTP/1.1。
-
请求头字段(Request Header Fields):
- Host:表示目标服务器的主机名和端口号。
- User-Agent:表示客户端的用户代理软件信息。
- Accept:表示客户端可接受的媒体类型。
- Content-Type:表示请求体中的媒体类型。
- Authorization:表示用于身份验证的凭证。
-
响应状态行字段(Response Status Line Fields):
- 版本(Version):表示使用的 HTTP 协议版本,如 HTTP/1.1。
- 状态码(Status Code):表示请求的处理结果状态,如 200 OK、404 Not Found 等。
- 状态消息(Status Message):表示与状态码对应的描述信息。
-
响应头字段(Response Header Fields):
- Server:表示服务器的软件信息。
- Content-Type:表示响应体的媒体类型。
- Content-Length:表示响应体的长度。
- Set-Cookie:表示设置客户端的 Cookie。
-
实体主体字段(Entity Body Fields):
- 请求体(Request Body):表示请求消息的主体内容。
- 响应体(Response Body):表示响应消息的主体内容。
除了上述字段,HTTP 还支持其他一些扩展字段和自定义字段,用于满足特定的需求和场景。需要根据具体的 HTTP 请求和响应,使用适当的字段来传递相关信息。

浙公网安备 33010602011771号