HTTP 1.0、1.1、2.0的区别

2023年 10月 6日 86.8k 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)是个很大的提升,允许同时发送多个请求而不用等待之前请求返回,减少了网络延迟。

image.png

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 了。

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 表示可以上传了,客户端收到后继续上传文件避免浪费流量。

image.png

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 连接发起多重的请求-响应消息。

image.png

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 有哪些重大改进?

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论