HTTP 0.9
只是一个草案,纯文本格式。蒂姆.伯纳斯-李最初设想的系统里的文档都是只读的,所以只允许用"GET" 动作从服务器上获取HTML文档,并且在响应请求之后立即关闭连接,功能非常有限。
HTTP 1.0
1996年正式发布
1. 增加了HEAD、POST等方法
2. 增加了响应状态码,标记可能的错误原因
3. 引入了协议版本号概念,
4. 引入了HTTP header头概念
5. 传输的数据不仅限于文本
在1.0中服务器发送完一个http响应后,会断开连接。1.0中确立了大部分现在使用的技术,但是它还不是一个正式的标准
HTTP 1.1
1999年,HTTP1.1发布了RFC文档,
http1.1是目前互联网上使用最广泛的协议,功能也十分完善。
1.增加了PUT、 DELETE等新的方法;
2.增加了缓存管理和控制;
3.明确了连接管理,允许持久连接;
4.允许响应数据分块(chunked),
利于传输大文件;
5.强制要求Host头,让互联网主机托管成为可能。
1.1中把connection 头写进标准,默认开启久连接,connection:keep-alive。什么时候关闭?timeout=20;设置超时时间;max = xxx;长连接最多接收xxx次请求就断开。
HTTP 2.0
相对于HTTP 1.1来说
1. 提升访问速度
2. 允许多路复用
3. 二进制分帧
HTTP 1.x的解析是基于文本,基于文本协议的格式解析存在天然缺陷。
4. 首部压缩
HTTP 1.x中header有大量信息,且每次都重复发送,HTTP 2.0用encoder减少传输header大小,通讯双方各cashe一份header fileds表。
5. 服务器推送(server push)
http2.0 基于Google的SPDY协议,注重性能改善,但还没有普及。
http3.0基于Google的QUIC协议,是将来的发展方向。
Q1:一个tcp连接可以对应几个http请求?
在长连接里可以对应多个
Q2:tcp连接中http请求发送可以一起吗?
在1.1中,pipelining技术可以完成多个请求同发,但是浏览器默认关闭,所以仍然认为不可行,
在2.0中,Multiplexing多个请求可以在同一个tcp连接中并行进行
Q3:浏览器如何提高页面加载的效率?
同一个连接顺序处理多个或者和服务器建立多个tcp连接。