HTTP1.1简述


发布于 2016-01-09 / 40 阅读 / 0 评论 /
HTTP1.1在1999年推出,至今仍在使用。

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每次请求都要重新连接的缺陷。