http 二进制_将REST API迁移到HTTP / 2:为什么以及如何进行?

c1394bbd86eb5ac1c539aa3c99ce3d01.png

Image:

作为开发人员,我们的主要目标一直是为我们的产品用户提供更快,更无缝的体验。 不断提高生产力和体验的渴望促使我们几乎不断地升级技术。 我们迁移到语言,Web框架,消息传递队列以及文本处理器和操作系统的较新版本。 但是不知何故,Web应用程序普遍使用的基本协议HTTP协议错过了十多年的升级。

HTTP / 1.1很棒,但是随着Web应用程序的规模和复杂性的增长,它的年龄正在开始显现。 这是升级到HTTP / 2的绝佳时机。

HTTP / 1.2发生了什么?

新HTTP的目标设定了很高的目标,并且为了实现这些指标,网络中数据的传输方式发生了根本性的变化。 HTTP / 2引入了新的二进制框架层,该层打破了与HTTP / 1.x客户端和服务器的向后兼容性。 因此,版本控制跳至2.0。

这个新的二进制框架层是什么?

这是一个简单的设计选择。 HTTP / 1.x传统上使用换行符分隔的文本来传输数据。 与二进制文件相比,它更慢,更大并且更容易出错。 因此,HTTP / 2在传输层切换为二进制格式。

e972e08885b5c76f6dd163ff99172ae1.png

Source: developers.google.com

这是指在套接字和我们从应用程序公开的HTTP API之间(而不是API本身)之间如何编码数据的设计更改。 将运行应用程序的Web容器将根据其支持的HTTP版本来完成这种编码,而无需对API层进行任何更改。

语义仍然相同。 您仍然可以像在HTTP 1.x中一样使用传统的GET,PUT,POST,DELETE。

我的主要好处是什么?

在不详细介绍二进制流如何工作的情况下,让我们用以下一条语句对其进行总结,然后继续介绍它如何为我们提供帮助:

HTTP / 2将HTTP协议通信分解为交换二进制编码的帧,然后将其映射到属于特定流的消息,所有这些消息都在单个TCP连接中进行多路复用。

现在,来谈谈好处:

1,二进制处理:二进制内容更快,更轻,更紧凑。 HTTP / 2仅有一个,而不是在HTTP / 1.x中具有四个不同的消息解析选项。 同样,二进制内容为处理大写字母,空格,空白行和其他难以在文本中体现的概念提供了更多支持。

2.复用:HTTP / 1.x的基本原理是每次只能传递一个响应。 这导致响应排队和阻塞,从而减慢了TCP连接的速度。 这意味着到目前为止,客户必须猜测需要获取的正确响应顺序才能快速处理事务。

66e9ddc551c3a58918fa2ed47d0ec3cb.png

Source: SessionStack

HTTP / 2取消了这个概念,新的二进制流使完整的请求和响应多路复用成为可能。 因此,客户端只需要每个源一个连接就可以并行传递多个请求和响应,而彼此之间不会相互阻塞。 反过来,这可以消除不必要的延迟并提高可用网络容量的利用率,从而缩短页面加载时间。

3.标头压缩:HTTP / 2使用HPACK压缩技术来跨请求和响应压缩标头数据。

53214b285b3444a2a7fd405edd5b1b83.png

Source: GlobalDots

HPACK使用霍夫曼编码压缩标头,而客户端和服务器维护以前看到的标头列表,以加快编码和解释速度。 在当今的平均请求中,我们可以看到标头跨越了数千KB的Cookie,并且标头压缩大大提高了效率。

4.服务器推送:在HTTP / 1.x中,服务器仅在对客户端发出请求时才能与客户端通信,并且只能通过响应该特定请求进行通信。 但是,在HTTP / 2中,服务器可以将多个响应发送到单个请求。 因此,除了响应外,服务器还可以将其他有用信息推送到客户端。 例如,在加载网页时,服务器可以立即开始发送javascript文件和样式表,而无需等待客户端要求它们。 它还可以用于活动更新客户端的缓存,以更快地进行渲染。

如何移至HTTP / 2?

b5bf01e99f5d361dd30471961c463907.png

由于获得了如此多的好处,组织一直在稳步向HTTP / 2迈进,其使用量不断增加。 截至目前,所有网站中有32.4%使用HTTP / 2。 业界有信心这个数字只会上升。 那么,您如何跳上这列火车?

如前所述,无需更改应用程序层即可过渡到HTTP / 2,因为更改是在编码和信息传输机制中进行的。

如果您使用的是cURL,只需使用以下命令检查当前版本

curl --version

您将收到以下协议列表:dict文件ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp。 如果您未在其中看到http2,则只需更新cURL版本。

Mac用户可以轻松完成

brew reinstall curl --with-openssl --with-nghttp2

对于其他操作系统,您可以阅读这篇有用的文章。

现在如何更新Web服务器和容器? 每个人都有一个略有不同,但非常简单且最小的更改即可进行升级,而且与现有代码的兼容性没有问题。

我主要将Spring Boot用于我的应用程序。 它具有一个嵌入式的tomcat服务器,该服务器自1.4.x版本开始支持HTTP / 2,该版本具有Tomcat 8.5.x版本。 我们需要做的就是将HTTP 2升级协议添加到Tomcat的连接器中。 我们可以通过定制嵌入式Tomcat容器来做到这一点:

@Beanpublic EmbeddedServletContainerCustomizer tomcatCustomizer() {   return (container) -> {     if (container instanceof TomcatEmbeddedServletContainerFactory) {       ((TomcatEmbeddedServletContainerFactory) container) .addConnectorCustomizers((connector) -> {         connector.addUpgradeProtocol(new Http2Protocol());     });   } };}

就这么简单!

现在,所有流行的Web框架都支持HTTP / 2,并且迁移非常简单,并为我们提供了许多好处,可以为用户提供更好的体验。 我希望本文能向您介绍HTTP / 2迁移的方向。

(本文翻译自Arindam Roy的文章《Migrating your REST APIs to HTTP/2: Why and How?》,参考:https://blog.usejournal.com/migrating-your-rest-apis-to-http-2-why-and-how-8caee7d798fb)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值