HTTP协议的版本有哪些?它们之间有什么区别?代码举例讲解

HTTP协议目前有HTTP/0.9、HTTP/1.0、HTTP/1.1和HTTP/2四个主要版本。

主要区别如下:

  1. HTTP/0.9:最早的版本,只有一个请求方法GET,非常简单。
  2. HTTP/1.0:引入状态码和请求方法,支持Cookie和Content-Type头部等。但每次请求都会建立新的连接,效率低下。
  3. HTTP/1.1:在1.0的基础上增加了持久连接,客户端和服务器可以复用同一个TCP连接来发送和接收多个HTTP请求/响应,提高了效率。并增加了Host、Cache-Control等头部,增强了缓存机制。
  4. HTTP/2:采用二进制分帧层而不是明文,并采用header compression压缩头部,实现了全双工通信和请求的多路复用,大大提高了HTTP的性能。但需要HTTPS环境,不支持HTTP/1.1的一些头部,与旧版不兼容。

目前绝大多数网站仍在使用HTTP/1.1,HTTP/2正逐步普及和取代HTTP/1.1,以进一步提高网站性能。HTTP/3也在草案中,采用QUIC协议替代TCP+TLS,进一步优化延迟。
代码示例:
HTTP/1.1 请求/响应:

GET / HTTP/1.1  
Host: example.com

HTTP/1.1 200 OK  
Content-Type: text/html

HTTP/2 请求帧:

0x50 0x03 0x00 0x01          // Frame header (Type: HEADERS, Flags: END_HEADERS)
0x06 0x75 0x73 0x65 0x72 0x73  // Payload (users) 
0x0a 0x6a 0x6f 0x68 0x6e        // Payload (john)  

这个示例中,请求行、状态行都被替换为二进制帧格式,显著减少了报文大小。