HTTP协议目前有HTTP/0.9、HTTP/1.0、HTTP/1.1和HTTP/2四个主要版本。
主要区别如下:
- HTTP/0.9:最早的版本,只有一个请求方法GET,非常简单。
- HTTP/1.0:引入状态码和请求方法,支持Cookie和Content-Type头部等。但每次请求都会建立新的连接,效率低下。
- HTTP/1.1:在1.0的基础上增加了持久连接,客户端和服务器可以复用同一个TCP连接来发送和接收多个HTTP请求/响应,提高了效率。并增加了Host、Cache-Control等头部,增强了缓存机制。
- 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)
这个示例中,请求行、状态行都被替换为二进制帧格式,显著减少了报文大小。