HTTP 1.0、1.1、2.0的区别

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.3、内容协商

增加了语言、编码、类型字段,客户端、server 协商交换的内容。

1.4、HOST

现在有了虚拟主机、允许多个主机名绑定到同一个IP地址。一个 IP 可对应多个域名,比如 www.a.com, www.b.com 最终和虚拟机服务器IP 111.111.111.111关联起来,服务器收到访问时如何区分是哪个网站访问返回对应内容呢?这就需要用到 HOST 了。

html 复制代码
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

相关推荐
周三有雨5 小时前
【面试题系列Vue07】Vuex是什么?使用Vuex的好处有哪些?
前端·vue.js·面试·typescript
爱米的前端小笔记6 小时前
前端八股自学笔记分享—页面布局(二)
前端·笔记·学习·面试·求职招聘
好学近乎知o6 小时前
解决sql字符串
面试
我明天再来学Web渗透10 小时前
【SQL50】day 2
开发语言·数据结构·leetcode·面试
程序员奇奥11 小时前
京东面试题目分享
面试·职场和发展
理想不理想v13 小时前
【经典】webpack和vite的区别?
java·前端·javascript·vue.js·面试
沈小农学编程15 小时前
【LeetCode面试150】——202快乐数
c++·python·算法·leetcode·面试·职场和发展
清酒伴风(面试准备中......)16 小时前
操作系统基础——针对实习面试
笔记·面试·职场和发展·操作系统·实习
GDDGHS_16 小时前
“Kafka面试攻略:核心问题与高效回答”
分布式·面试·kafka
最近好乐1 天前
TS入门——快速上手(一)
前端·javascript·面试