HTTP1.0、HTTP1.1 和 HTTP2.0 有哪些区别?

HTTP1.0、HTTP1.1 和 HTTP2.0 都是 HTTP 协议的不同版本,主要区别如下:

HTTP1.0:

  1. 不支持持久连接,每次请求都需要建立新的TCP连接。
  2. 不支持流水线,一次只能发送一个请求。必须等响应返回后才能发送下一个请求。
  3. 不支持分块传输编码,需要先确定内容长度再发送请求。

HTTP1.1:

  1. 支持持久连接和流水线,允许在一个TCP连接上发送多个请求和接收响应。
  2. 支持分块传输编码,可以先发送请求然后再确定内容长度。更适合动态内容传输。
  3. 增加了更多的头部字段,如Host头用于虚拟主机。
  4. 支持代理和缓存以改善性能。

HTTP2.0:

  1. 二进制形式,更紧凑有效的数据格式。
  2. 全双工,客户端和服务器可以同时发送多个消息。
  3. 头部压缩,避免重复的头部字段被多次发送。
  4. 服务器推送,允许服务器预推关联资源。
  5. 优先级与依赖,为更重要或更紧急的数据赋予更高的优先级。

代码示例:

python
# HTTP1.1 - 支持长连接 
conn = http.client.HTTPConnection('www.example.com')
conn.request('GET', '/') 
res = conn.getresponse()
print(res.status)

conn.request('GET', '/test')
res = conn.getresponse() 
print(res.status)

# HTTP2 - 双向并发
conn = http.client.HTTPConnection('www.example.com', enable_http_1_1=False)
conn.request('GET', '/')
res = conn.getresponse()
print(res.status)

conn.request('GET', '/test')
res = conn.getresponse()     
print(res.status)