1.HTTP1.1概述
HTTP1.1默认支持长连接,即在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭连接的消耗和延迟。如下图所示:
从图中易看出,长连接也是HTTP1.1与HTTP1.0最大的区别。
2.HTTP1.1的特点
HTTP1.1的主要特点有:
(1)支持长连接,通过Keep-Alive保持HTTP连接不断开,避免重复建立TCP连接。
(2)管道化,通过长连接实现一个连接中传输多个文件。
(3)加入缓存管理(新字段cache-control)
(4)支持断点续传
(5)增加Host字段,实现了在一台Web服务器上可以同一个IP地址和端口号上使用不同的主机名来创建多个虚拟Web站点。
(6)添加了其他请求方法,比如PUT、DELETE、OPTIONS等。
3.HTTP1.1的缺点
HTTP1.1有以下缺点:
(1)高延迟,队头阻塞
(2)无状态特性,阻碍交互
(3)明文传输,不安全
(4)不支持服务端推送
此外,HTTP1.1对带宽的利用率并不理想(带宽是指每秒最大能发送或接收的字节数),很难将带宽装满。导致此结果的原因有三个:
(1)TCP的慢启动,一个TCP连接建立后,就进入发送数据状态,刚开始TCP协议会采用一个非常慢的速度发送数据,而页面中常用的一些关键资源文件本来就不大,如HTML文件、CSS文件和JavaScript文件,通常这些文件在建立好连接之后就要发起请求,单这个过程慢启动,耗费时间就要更多。
(2)同时开启了多条TCP连接,这些连接会竞争固定的带宽
(3)队头阻塞问题
4.HTTP1.1与HTTP1.0的区别
主要在以下五个方面有区别:
4.1.缓存处理
在http1.0中主要使用header的if-modified-since/expires来做缓存的判断依据。
http1.1引入了更多的缓存策略控制策略。比如Entity tag,If-Unmodified-Since,If-match,If-None-Match等更多可供选择的缓存头来控制缓存。
4.2.带宽优化及网络连接的使用
HTTP1.0中存在一些浪费带宽的现象。例如客户端只需要某个对象中的一部分,服务器端却把整个对象送过来了,并且不能支持断点续传的功能。
HTTP1.1在请求头中引入了range头域,它允许只请求资源中的某一部分,即返回码是206(partial content)。方便开发者的自由选择、节省带宽。
4.3.错误通知的管理
在HTTP1.1中新增了24个错误状态响应码。如409(conflict)表示请求的资源与资源当前的状态发生冲突,401(gone)表示服务器上的资源被永久的删除。
4.4.host头处理
在HTTP1.0中认为每一个服务器都绑定一个ip地址,因此请求消息头中并没有传递主机名(hostname)。
但是随着虚拟主机技术的发展,在一台物理服务器上可以存在多台虚拟主机,并且他们共享一个ip地址。
HTTP1.1中请求和响应都支持host头域,且请求消息中如果没有host头域会报错(400bad request)
4.5.长链接
HTTP1.1支持长链接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立多个连接的消耗和延迟。在HTTP1.1中默认打开onnection:keep-alive,在一定程度上弥补了http1.0每次请求都要重新连接的缺陷。