HTTP-相关

HTTP 发展史

HTTP不同版本

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于客户端和服务器之间的通信。下面列举了HTTP协议的常用版本:

  1. HTTP/0.9:最初的HTTP协议,只支持GET方法,没有请求头和请求体,响应中只有实体内容。

  2. HTTP/1.0:增加了多种请求方法,如POST、HEAD和OPTIONS,也支持请求头和请求体,响应头中增加了状态码和其他元信息。

  3. HTTP/1.1:在1.0的基础上增加了持久连接、管线化、分块传输编码等新特性,提高了网络传输效率。

  4. HTTP/2:在1.1的基础上增加了二进制协议、多路复用、服务器推送等新特性,进一步提高了网络传输效率。

  5. HTTP/3:使用QUIC协议作为传输层协议,支持快速建立连接、安全性增强、支持多路复用等特性,进一步提高了网络传输效率。

需要注意的是,虽然HTTP协议的版本不同,但是它们的基本原理和语法结构都相似,因此大部分HTTP应用程序都能够兼容多个版本的HTTP协议。

有了HTTP 为什么还要有RPC呢

HTTP和RPC都是应用层协议,但它们的设计目的和适用场景不同。虽然HTTP可以用于服务之间的通信,但在实际应用中,RPC比HTTP更适合服务之间的调用,原因如下:

  1. 性能更高:HTTP协议需要进行文本编码、解码和处理,而RPC协议使用二进制编码,在传输效率和性能上比HTTP更高。

  2. 更好的序列化支持:RPC框架通常提供多种序列化/反序列化方式,如ProtoBuf、Thrift、Avro等,可以根据实际业务需求自由选择。

  3. 更好的协议支持:RPC框架通常支持多种协议,如TCP、UDP、HTTP、Websocket等,可以在不同的场景下选择不同的协议。

  4. 更好的远程调用支持:RPC框架通常支持异步调用和回调机制,可以提高调用效率。

  5. 更好的可扩展性:RPC框架通常提供服务治理、负载均衡、容错等机制,可以方便地进行服务的扩展和管理。

当然,在一些简单的场景下,使用HTTP也可以满足需求。但是在跨语言、高并发、大规模分布式系统等场景下,RPC更为合适。另外,对于一些需要更为严格的消息传递协议、更高效的二进制序列化和反序列化、更好的服务治理等场景,使用RPC是更好的选择。

HTTPS

HTTPS(Hyper Text Transfer Protocol Secure)是HTTP协议的安全版本,通过使用SSL或TLS协议对HTTP进行加密来保证数据传输的安全性和完整性。HTTPS协议在数据传输过程中使用公钥加密对称密钥,然后使用对称密钥对数据进行加密。这样可以防止数据被窃听、篡改和伪造。

HTTPS的加密过程主要包括以下步骤:

  1. 客户端向服务器发送HTTPS请求。

  2. 服务器返回公钥证书。

  3. 客户端验证证书,获取服务器公钥。

  4. 客户端生成对称密钥,使用服务器公钥加密,并发送给服务器。

  5. 服务器使用私钥解密,获取对称密钥。

  6. 双方使用对称密钥加密和解密数据。

相比HTTP协议,HTTPS协议具有以下优势:

  1. 数据传输安全。HTTPS使用加密技术保证数据传输过程的安全性,可以防止数据被窃听、篡改和伪造。

  2. 身份验证。HTTPS使用数字证书对服务器和客户端进行身份验证,可以防止中间人攻击和欺骗。

  3. 信任度高。HTTPS使用数字证书颁发机构(CA)对证书进行签名,可以保证证书的真实性和可信度。

因此,对于需要保证数据传输安全性和身份验证的应用场景,使用HTTPS协议进行数据传输是非常必要和重要的。

HTTP2

HTTP/2是新一代HTTP协议,它在HTTP/1.1的基础上提供了更多的特性,如二进制协议、多路复用、服务器推送等,可以提高网络传输效率,提升客户端的性能体验。相比于HTTP/1.1协议,HTTP/2不仅可以减少网络延迟,还可以保持长连接,避免HTTP请求的重复建立和拆除。

目前,很多互联网公司(如Google、Facebook)已经在部分应用中开始使用HTTP/2协议,但并不是所有的应用都采用HTTP/2协议。要使用HTTP/2协议,需要满足以下条件:

  1. 客户端和服务器都支持HTTP/2协议。

  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

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协议本身存在一些问题,例如:

  1. 握手过程较为耗时。TCP在建立连接时需要进行三次握手,这会增加网络延迟。

  2. 拥塞控制不够灵活。TCP使用拥塞窗口控制算法来避免网络拥塞,但是这个算法缺乏对高延迟和丢包的适应性。

  3. 不支持多路复用。TCP是一种面向连接的协议,每个连接只能传输一个数据流,无法实现多路复用,这会影响网络传输的效率。

相比之下,QUIC协议则在这些方面都有很大的优势。QUIC使用UDP协议作为传输层协议,可以在握手阶段完成连接建立和加密,减少网络延迟;拥塞控制算法更加灵活,可以根据网络状况进行实时调整;同时,QUIC支持单个连接上的多个数据流,可以实现多路复用,提高网络传输效率。

因此,HTTP/3选择使用QUIC作为传输层协议,可以解决TCP协议存在的一些问题,提高网络传输效率和性能。同时,QUIC还提供了更好的安全性和可靠性,能够保护网络通信不受中间人攻击和干扰。

 HTTP常见字段

在 HTTP 协议中,有许多字段用于表示请求和响应的各种属性和元数据。以下是一些常见的 HTTP 字段:

  1. 请求行字段(Request Line Fields):

    • 方法(Method):表示请求的操作类型,如 GET、POST、PUT、DELETE 等。
    • URL(Uniform Resource Locator):表示请求的资源的位置。
    • 版本(Version):表示使用的 HTTP 协议版本,如 HTTP/1.1。
  2. 请求头字段(Request Header Fields):

    • Host:表示目标服务器的主机名和端口号。
    • User-Agent:表示客户端的用户代理软件信息。
    • Accept:表示客户端可接受的媒体类型。
    • Content-Type:表示请求体中的媒体类型。
    • Authorization:表示用于身份验证的凭证。
  3. 响应状态行字段(Response Status Line Fields):

    • 版本(Version):表示使用的 HTTP 协议版本,如 HTTP/1.1。
    • 状态码(Status Code):表示请求的处理结果状态,如 200 OK、404 Not Found 等。
    • 状态消息(Status Message):表示与状态码对应的描述信息。
  4. 响应头字段(Response Header Fields):

    • Server:表示服务器的软件信息。
    • Content-Type:表示响应体的媒体类型。
    • Content-Length:表示响应体的长度。
    • Set-Cookie:表示设置客户端的 Cookie。
  5. 实体主体字段(Entity Body Fields):

    • 请求体(Request Body):表示请求消息的主体内容。
    • 响应体(Response Body):表示响应消息的主体内容。

除了上述字段,HTTP 还支持其他一些扩展字段和自定义字段,用于满足特定的需求和场景。需要根据具体的 HTTP 请求和响应,使用适当的字段来传递相关信息。

posted @ 2019-04-18 18:22  GJH-  阅读(60)  评论(0)    收藏  举报