HTTP 1.1 新特性
1.1、持久连接、管线
- HTTP 1.0:短连接(short-lived),HTTP 多数采用 TCP 传输协议,每次请求需要重新建立 TCP 连接,用完就关闭,有较大网络延迟。请求完毕才可发下次请求。
- HTTP 1.1:持久连接(persistent-connection),请求完毕后 TCP 连接不断开,后面的连续请求复用 TCP 连接。HTTP 1.1 的管线(pipelining model)是个很大的提升,允许同时发送多个请求而不用等待之前请求返回,减少了网络延迟。
HTTP 1.1 的管线默认是关闭的:
- 代埋使开发人员不容易预见、诊断问题。
- 实现起来复杂
- 受限于请求头阻塞问题(HOL)。
由于上述原因,管线被 HTTP 2.0 的多路复用取代了。
1.2、缓存控制
- HTTP 1.0 使用
Expires
判断浏览器缓存是否过期,由于手动调整设备的时间造成判断不准,HTTP 1.1 改成了使用Cache-Control: max-age=xxx
,意思是 xxx 秒后缓存过期。 - 浏览器缓存过期后会启用协商缓存。
- HTTP 1.0 用的是
Last-Modified/If-Modified-Since
,每次请求的响应头中有Last-Modified
,这是资源的最后修改时间,下次请求是把这个时间放到 request.header 的If-Modified-Since
字段中,server 比较If-Modified-Since
和资源的最后修改时间判断浏览器的缓存是否有效,如果时间一致,server 返回 304 表示缓存可以使用;如果时间不一致,则返回 202 和最新数据。 - 由于时间最小单位是秒,1秒内频繁改动则无法识别,所以 HTTP 1.1 使用
ETag
,server 生成的唯一标识。从原先比较时间改成比较 tag。 ETag
对应原先的Last-Modified
。If-None-Match
类似原先的If-Modified-Since
。
- HTTP 1.0 用的是
详见:HTTP-缓存
1.3、内容协商
增加了语言、编码、类型字段,客户端、server 协商交换的内容。
1.4、HOST
现在有了虚拟主机、允许多个主机名绑定到同一个IP地址。一个 IP 可对应多个域名,比如 www.a.com, www.b.com 最终和虚拟机服务器IP 111.111.111.111关联起来,服务器收到访问时如何区分是哪个网站访问返回对应内容呢?这就需要用到 HOST 了。
GET /home.html HTTP/1.1
Host: a.com
1.5、带宽优化
请求范围
对于已经下载了部分的文件,需要下载剩余部分,可以指定在请求头中加入 Range
请求剩余部分。
状态码 100
HTTP 1.0 POST 请求上传文件时,需要把整个文件发送到 server 进行处理,server 有可能校验不通过、拒绝上传、存在流量浪费。HTTP 1.1 做了改进,先把请求头发过来让 server 校验,验证通过后server 响应 100 表示可以上传了,客户端收到后继续上传文件避免浪费流量。
Tip:
- 对于小文件一次传过去就可以了,如果传两次反而浪费流量,至于多大文件需要传两次 server 可以配置。
- 常说 GEG/POST 有个区别:GET 请求一次、POST 请求两次,其实 POST 请求几次是可配置的,并不算区别。
1.6、压缩
许多格式的数据在传输时都会做预压缩处理。数据的压缩可以大幅优化带宽的利用。然而,HTTP/1.0对数据压缩的选项提供的不多,不支持压缩细节的选择,也无法区分端到端(end-to-end)压缩或者是逐跳(hop-by-hop)压缩。
HTTP/1.1则对内容编码(content-codings)和传输编码(transfer-codings)做了区分。内容编码总是端到端的,传输编码总是逐跳的。
HTTP/1.0包含了Content-Encoding头部,对消息进行端到端编码。HTTP/1.1加入了Transfer-Encoding头部,可以对消息进行逐跳传输编码。HTTP/1.1还加入了Accept-Encoding头部,是客户端用来指示他能处理什么样的内容编码。
HTTP 2.0 新特性
1.1、多路复用 (Multiplexing)
允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
1.2、二进制分帧
应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层,应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。
1.3、服务端推送(Server Push)
客户端请求网页时,server 会把 logo、css 文件主动返回,server 知道这些内容会用到。
1.4、首部压缩
HTTP 2.0 使用了 HPACK 算法压缩首部。
Reference
- mdn-HTTP/1.1 – The standardized protocol
- 一篇文章详解请求头Host的概念
- 阿里一面:HTTP 1.0 和 HTTP 1.1 有什么区别?
- # HTTP/2 相比 1.0 有哪些重大改进?