OPTIONS 方法,其主要用于 CORS – Cross Origin Resource Sharing 应用 。HTTP/1.1 应该分成两个时代,一个是 2014 年前,一个是 2014 年后,因为 2014 年 HTTP/1.1 有了一组 RFC(7230 /7231/7232/7233/7234/7235),这组 RFC 又叫“HTTP/2 预览版” 。其中影响 HTTP 发展的是两个大的需求:
- 一个需要是加大了 HTTP 的安全性,这样就可以让 HTTP 应用得广泛,比如,使用 TLS 协议 。
- 另一个是让 HTTP 可以支持更多的应用,在 HTTP/1.1 下,HTTP 已经支持四种网络协议:
- 传统的短链接 。
- 可重用 TCP 的的长链接模型 。
- 服务端 push 的模型 。
- WebSocket 模型 。
HTTP/2虽然 HTTP/1.1 已经开始变成应用层通讯协议的一等公民了,但是还是有性能问题,虽然 HTTP/1.1 可以重用 TCP 链接,但是请求还是一个一个串行发的,需要保证其顺序 。然而,大量的网页请求中都是些资源类的东西,这些东西占了整个 HTTP 请求中最多的传输数据量 。所以,理论上来说,如果能够并行这些请求,那就会增加更大的网络吞吐和性能 。
另外,HTTP/1.1 传输数据时,是以文本的方式,借助耗 CPU 的 zip 压缩的方式减少网络带宽,但是耗了前端和后端的 CPU 。这也是为什么很多 RPC 协议诟病 HTTP 的一个原因,就是数据传输的成本比较大 。
其实,在 2010 年时,Google 就在搞一个实验型的协议,这个协议叫 SPDY,这个协议成为了 HTTP/2 的基础(也可以说成 HTTP/2 就是 SPDY 的复刻) 。HTTP/2 基本上解决了之前的这些性能问题,其和 HTTP/1.1 最主要的不同是:
- HTTP/2 是一个二进制协议,增加了数据传输的效率 。
- HTTP/2 是可以在一个 TCP 链接中并发请求多个 HTTP 请求,移除了 HTTP/1.1 中的串行请求 。
- HTTP/2 会压缩头,如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分 。这就是所谓的 HPACK 算法(参看 RFC 7541 附录 A)
- HTTP/2 允许服务端在客户端放 cache,又叫服务端 push,也就是说,你没有请求的东西,我服务端可以先送给你放在你的本地缓存中 。比如,你请求 X,我服务端知道 X 依赖于 Y,虽然你没有的请求 Y,但我把把 Y 跟着 X 的请求一起返回客户端 。
当然,还需要注意到的是 HTTP/2 的协议复杂度比之前所有的 HTTP 协议的复杂度都上升了许多许多,其内部还有很多看不见的东西,比如其需要维护一个“优先级树”来用于来做一些资源和请求的调度和控制 。如此复杂的协议,自然会产生一些不同的声音,或是降低协议的可维护和可扩展性 。所以也有一些争议 。尽管如此,HTTP/2 还是很快地被世界所采用 。
HTTP/2 是 2015 年推出的,其发布后,Google 宣布移除对 SPDY 的支持,拥抱标准的 HTTP/2 。过了一年后,就有 8.7%的网站开启了 HTTP/2,根据 这份报告,截止至本文发布时(2019 年 10 月 1 日 ),在全世界范围内已经有 41%的网站开启了 HTTP/2 。
HTTP/2 的官方组织在 Github 上维护了一份各种语言对 HTTP/2 的实现列表,大家可以去看看 。
推荐阅读
- 春节的来历是什么20字
- 梦见白马的寓意
- 晚霞行千里的上一句
- 万户捣衣声的上一句
- 目前公认“值得买”的3款好机 现在什么手机值得入手
- 加强手机信号最好的方法 手机信号不好怎么办
- 公认口碑不错的3款国产手机 国产手机哪个牌子好
- 不用的烟道口如何封堵
- 插座接线有三个怎么接
- Steam设置中文方法 英文版的steam怎么设置中文
