【学习记录】http各版本的差异

323 阅读5分钟

http 各版本的差异

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在客户端和服务器之间传输超文本(如 HTML 页面)。HTTP 协议经历了多个版本的演进,每个版本都有其特点和改进。以下是 HTTP 各个版本的详细描述及其报文结构:

1. HTTP/0.9

1.1 概述

  • HTTP/0.9 是 HTTP 协议的第一个版本,发布于 1991 年。
  • 它非常简单,只支持 GET 方法,并且没有头部字段。

1.2 报文结构

  • 请求报文:

    GET /index.html
    
    • 只有一行,包含 GET 方法和请求的资源路径。
  • 响应报文:

    <HTML>
    <HEAD>...</HEAD>
    <BODY>...</BODY>
    </HTML>
    
    • 响应报文只包含 HTML 内容,没有状态码和头部字段。

1.3 特点

  • 简单:只支持 GET 方法,没有头部字段。
  • 无状态:每次请求都是独立的,服务器不保存客户端的状态。

2. HTTP/1.0

2.1 概述

  • HTTP/1.0 发布于 1996 年,是 HTTP/0.9 的扩展版本。
  • 它引入了头部字段、状态码、多种请求方法(如 POSTHEAD)和内容类型(如 Content-Type)。

2.2 报文结构

  • 请求报文:

    GET /index.html HTTP/1.0
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    
    • 请求行:包含方法、资源路径和协议版本。
    • 头部字段:包含 HostUser-AgentAccept 等信息。
  • 响应报文:

    HTTP/1.0 200 OK
    Content-Type: text/html
    Content-Length: 1234
    
    <HTML>...</HTML>
    
    • 状态行:包含协议版本、状态码和状态描述。
    • 头部字段:包含 Content-TypeContent-Length 等信息。
    • 响应体:包含实际的 HTML 内容。

2.3 特点

  • 头部字段:引入了头部字段,支持更多的元数据。
  • 状态码:引入了状态码,如 200 OK404 Not Found
  • 内容类型:支持多种内容类型,如 text/htmlimage/jpeg

3. HTTP/1.1

3.1 概述

  • HTTP/1.1 发布于 1999 年,是 HTTP/1.0 的改进版本。
  • 它引入了持久连接、分块传输编码、缓存控制等特性。

3.2 报文结构

  • 请求报文:

    GET /index.html HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    Connection: keep-alive
    
    • 请求行:包含方法、资源路径和协议版本。
    • 头部字段:包含 HostUser-AgentAcceptConnection 等信息。
  • 响应报文:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 1234
    Connection: keep-alive
    
    <HTML>...</HTML>
    
    • 状态行:包含协议版本、状态码和状态描述。
    • 头部字段:包含 Content-TypeContent-LengthConnection 等信息。
    • 响应体:包含实际的 HTML 内容。

3.3 特点

  • 持久连接:默认使用持久连接,减少连接建立和关闭的开销。
  • 分块传输编码:支持分块传输编码,允许服务器逐步发送数据。
  • 缓存控制:引入了 Cache-Control 头部字段,支持更灵活的缓存策略。

4. HTTP/2

4.1 概述

  • HTTP/2 发布于 2015 年,是 HTTP/1.1 的改进版本。
  • 它引入了二进制分帧、多路复用、头部压缩等特性,提高了性能和效率。

4.2 报文结构

  • 请求报文:

    :method: GET
    :scheme: https
    :authority: www.example.com
    :path: /index.html
    user-agent: Mozilla/5.0
    accept: text/html
    
    • 请求行被替换为伪头部字段,如 :method:scheme:authority:path
    • 头部字段使用 HPACK 压缩算法进行压缩。
  • 响应报文:

    :status: 200
    content-type: text/html
    content-length: 1234
    
    • 状态行被替换为伪头部字段 :status
    • 头部字段使用 HPACK 压缩算法进行压缩。

4.3 特点

  • 二进制分帧:将报文分解为二进制帧,提高传输效率。
  • 多路复用:允许在同一个连接上并行传输多个请求和响应。
  • 头部压缩:使用 HPACK 压缩算法减少头部字段的大小。
  • 服务器推送:允许服务器主动向客户端推送资源。

5. HTTP/3

5.1 概述

  • HTTP/3 发布于 2022 年,是 HTTP/2 的改进版本。
  • 它基于 QUIC 协议,使用 UDP 代替 TCP,进一步提高了性能和安全性。

5.2 报文结构

  • 请求报文:

    :method: GET
    :scheme: https
    :authority: www.example.com
    :path: /index.html
    user-agent: Mozilla/5.0
    accept: text/html
    
    • 请求行被替换为伪头部字段,如 :method:scheme:authority:path
    • 头部字段使用 QPACK 压缩算法进行压缩。
  • 响应报文:

    :status: 200
    content-type: text/html
    content-length: 1234
    
    • 状态行被替换为伪头部字段 :status
    • 头部字段使用 QPACK 压缩算法进行压缩。

5.3 特点

  • 基于 QUIC:使用 UDP 代替 TCP,减少连接建立和重传的开销。
  • 多路复用:允许在同一个连接上并行传输多个请求和响应。
  • 头部压缩:使用 QPACK 压缩算法减少头部字段的大小。
  • 安全性:默认使用 TLS 1.3 加密,提高安全性。

6. 总结

版本特点报文结构
HTTP/0.9简单,只支持 GET 方法,没有头部字段请求:GET /index.html
响应:HTML 内容
HTTP/1.0引入头部字段、状态码、多种请求方法、内容类型请求:请求行 + 头部字段
响应:状态行 + 头部字段 + 响应体
HTTP/1.1持久连接、分块传输编码、缓存控制请求:请求行 + 头部字段
响应:状态行 + 头部字段 + 响应体
HTTP/2二进制分帧、多路复用、头部压缩、服务器推送请求:伪头部字段 + 压缩头部
响应:伪头部字段 + 压缩头部
HTTP/3基于 QUIC,使用 UDP,多路复用,头部压缩,默认使用 TLS 1.3请求:伪头部字段 + 压缩头部
响应:伪头部字段 + 压缩头部

HTTP 协议的演进不断提高了性能、效率和安全性,HTTP/3 是目前最新的版本,基于 QUIC 协议,进一步优化了传输性能。