本文介绍 HTTP(Hyper Text Transfer Protocol,超文本传输协议)的版本发展历程及各版本新增特性。
HTTP/0.9
HTTP/0.9
是第一个版本的HTTP协议,只允许客户端发送GET
请求,且不支持请求头,由于没有协议头,所以 HTTP/0.9
只支持纯文本。
HTTP/0.9
典型的无状态,每个事务独立进行处理,事务结束就释放连接。一次传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接关闭,如果请求的页面不存在也不会返回任何错误码。
HTTP/1.0
HTTP/1.0
是HTTP协议的第二个版本,相对于HTTP/0.9
增加了以下主要特性:
- 请求与响应支持头域
- 响应对象以一个响应状态行开始
- 响应对象不只限于超文本
- 开始支持客户端通过
POST
方法向Web服务器提交数据,支持GET
、HEAD
、POST
方法 - 支持长连接(默认还是使用短连接),缓存机制以及身份认证
HTTP/1.1
HTTP/1.1
是HTTP协议的第三个版本,是目前使用最广泛的协议版本,相对于HTTP/1.0
增加了以下主要特性:
- 默认为长连接
HTTP/1.1
支持长连接(PersistentConnection)和请求的流水线(Pipeline)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP/1.1
中默认开启Connection: keep-alive
,弥补了HTTP/1.0
每次请求都要创建连接的缺点。 - 提供了范围请求功能(宽带优化)
HTTP/1.0
中存在一些浪费带宽的现象,如客户端只需要某对象的一部分,而服务器却将整个对象送过来,并且不支持断点续传功能,HTTP/1.1
在请求头引入了range
头域,允许只请求资源的某部分,即返回码是206(Partial Content)
,这样就方便开发者自由选择以便充分利用带宽和连接,这是支持断点续传的基础。 - 提供了虚拟主机的功能(HOST域)
HTTP/1.0
中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中URL没有传递主机名(hostname),但随着虚拟主机技术的发展,在一台物理机上可以存在多个虚拟主机(Multi-homed Web Servers),并且这些虚拟主机共享一个IP地址。HTTP/1.1
的请求消息和响应消息都应支持Host
头域,且请求消息中如果没有Host
头域会报告一个错误:400 Bad Request
。 - 多了一些缓存处理字段
HTTP/1.1
在HTTP/1.0
基础上加入了一些cache新特性,引入了实体标签,一般被称为 e-tags,新增更为强大的Cache-Control
头。 - 错误通知的管理
在HTTP/1.1
中新增了24个错误状态响应码,如-
409(Conflict)
:请求的资源与资源当前状态发生冲突 -
410(Gone)
:服务器上的某个资源被永久性删除
-
HTTP/2.0
HTTP/2.0
是HTTP协议的第四个版本,相对于HTTP/1.1
增加了以下主要特性:
- 二进制分帧
HTTP/2.0
的所有帧都采用二进制编码- 帧:客户端与服务器通过交换帧来通信,帧是通信的最小单位。
- 消息:逻辑上的HTTP消息,比如请求、响应,由一个或多个帧组成。
- 流:连接中的一个虚拟信道,可以承载双向的消息,每个流都有一个唯一的整数标识符(1、2...N)。
- 多路复用
允许同时通过单一的HTTP/2.0
连接发起多重请求-响应消息。有了新的分帧机制后,HTTP/2.0
不再依赖多个TCP连接去处理更多并发的请求。每个数据流都可以拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端根据每个帧首部的流标识符把它们重新组合起来。HTTP/2.0
连接是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)。 - 头部压缩
HTTP/1.1
首部带有大量信息,而且每次都要重复发送。HTTP/2.0
要求通信双方各自缓存一份首部字段表以避免重复传输。 - 请求优先级
浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个链接。 - 服务端推送
服务端推送能把客户端所需要的资源伴随着index.html
一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求、建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。
网友评论