HTTP各版本的演变
HTTP/0.9-单行协议
最初版本的HTTP协议并没有版本号,请求由单行指令构成,以唯一可用的GET方法开头,后面跟着目标资源的路径(一旦连接到服务器,协议、主机名、端口号都不是必须的)。后来,为了区分后来的版本,把单行协议的版本定位在0.9。
GET /mypage.html
特点:
- 唯一可用的方法是GET;
- 响应内容不包含HTTP头,只能传输HTML文件;
- 没有状态码或错误代码;
HTTP/1.0
- 协议版本信息会随着每个请求发送;
- 状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为(如更新或使用本地缓存);
- 引入HTTP头的概念,具备了传输除HTML文件以外的其他类型文档(归功于Content-Type头);
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
HTTP/1.1
- 支持持久连接,节省了多次打开TCP连接加载网页文档资源的时间;
- 增加管道化连接,允许在第一个请求的响应到达之前,就发送第二个请求;
- 支持响应分块;
- 引入额外的缓存控制机制;
- 引入内容协商机制(也即协商首部),包括语言、编码、类型等,并允许客户端和服务器之间约定以最合适的内容进行交换;
- 引入Host头,能够使不同域名配置在同一个IP地址的服务器上;
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
HTTP/2.0
- 该版本是二进制协议而不是文本协议,HTTP报文封装在帧中,语义不再可读;
- 支持多路复用,摆脱了HTTP/1.1中顺序传输的约束,并解决了HTTP/1.1中的队头阻塞问题;
- 压缩了headers,移除了重复和传输重复数据的成本;
HTTP/3.0
也称为HTTP over QUIC,它的核心是基于UDP的QUIC(Quick UDP Internet Connection)协议。
- 由于UDP本身是无连接的,QUIC有效减少了传统TCP连接时的握手时延;
- 无队头阻塞的多路复用;
- 传统TCP连接中,四元组(源IP,源端口,目的IP,目的端口)有任一发生改变都会导致连接重新建立,而QUIC的连接不受四元组的影响,IP或端口发生改变时,只要Connetion ID不变则连接仍然维持。
管道化连接与多路复用的区别
以单个TCP连接为例:
- 管道化连接使浏览器不必等待前一个请求的响应数据,立刻发送下一个请求,但资源的传输顺序仍然遵循原来请求发送的顺序,并没有解决HTTP/1.1中的队头阻塞问题。
- 多路复用使得资源被切分成小的块,将不同资源的小块打乱或交错在网络中传输,使得资源的传输顺序不再遵循原来请求发送的顺序,可以有效解决HTTP/1.1的队头阻塞问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通