[转]为何我们还需要继续学习HTTP?

为何我们还需要继续学习HTTP?

HTTP已经无处不在,在Web应用(互联网环境,包括基于浏览器的B/S应用和原生的移动应用)中,几乎百分之百使用了HTTP。在分布式的企业应用(企业内网环境)中,基于HTTP部署的应用比例占了大多数。而在云平台(云计算环境)中部署的分布式应用中,同样大多数应用也是使用HTTP部署的。在这三种运行环境中,HTTP就像是空气一样的存在物,程序运行在其中,却没有感觉。从架构设计的角度来说,“透明”是设计基础设施的最高境界,HTTP可以说已经达到了这个最高境界。

正因为如此,大多数IT工作者都不大关注HTTP,就像人类几乎从来不关注空气一样。很多IT工作者甚至还没有听说,他们最熟悉不过的HTTP的版本已经升级了。HTTP/2是HTTP的当前的最新版本,而围绕HTTP/3的设计、开发工作已经开展了几年,可能在两三年之后就会正式发布。

HTTP/2 in Action这本书是目前关于HTTP/2相关内容最全面的图书。这本书是引人入胜的,涵盖了HTTP/2各个方面的技术细节。

关注HTTP/2的IT工作者主要分成开发人员和运维人员两部分,这两部分IT工作者对于HTTP/2的关注点差别比较大,我来分别做一些分析。

对于开发人员,最大的好消息是,从HTTP/1.1升级到HTTP/2几乎是完全透明的,他们过去已经开发、部署的基于HTTP的应用不需要做任何修改就可以顺利升级到HTTP/2。经验更加丰富的开发人员,还懂得如何设计优雅的RESTful API(注意:仅仅基于HTTP的API,大多数都不是RESTful API),充分利用HTTP/1.1为设计开发RESTful API而内建的大量支持(通过URI来定义资源、使用多种HTTP Method、自定义的请求和响应header、自定义的响应staus code、资源表述的内容协商机制、分级的HTTP缓存等等)。这些为设计开发RESTful API而内建的支持在HTTP/2中依然保留了下来,基于HTTP/2设计开发RESTful API,从设计方法和套路上来说几乎没有变化。从REST架构风格的设计理念上看,HTTP/2继承了HTTP/1.1的REST架构风格,仅仅在性能和安全性两方面做了大量优化。

不过这也不意味着开发人员根本不需要花时间来学习HTTP/2。如果设计、开发一些对性能要求很高的应用,仍然需要深入学习HTTP/2,才能充分利用好HTTP/2内建的各种性能优化机制。只是简单地将HTTP/1.1升级到HTTP/2,并不意味着性能的大幅提升。从开发人员的角度看,最大的变化是传输格式从纯文本变成了二进制。HTTP/1.1是基于文本的,难以实现HTTP连接的多路复用(内建的pipeline机制很难用,几乎无人问津),而HTTP/2是二进制的,能够很好地支持HTTP连接的多路复用。因为这些改变,过去适用于HTTP/1.1的一些性能优化方法已经过时,不再适用于HTTP/2,这方面开发人员需要重新学习。

对于开发人员中的架构师来说,除了关注性能,还需要关注升级到HTTP/2对于安全性的提升。即使是设计分布式应用内部的API,有很多API也需要部署TLS,实现端到端加密。

对于运维人员,主要关注的是位于服务器端的各种基础设施(例如HTTP server、反向代理、防火墙)和中间件(例如分布式缓存、负载均衡、服务治理、API网关)对于HTTP/2的支持,将这些基础设施和中间件升级到最新的版本。好消息是目前大多数常用的基础设施和中间件都已经能够支持HTTP/2,包括使用了TLS的H2和没有使用TLS的H2C。这个升级过程对于开发人员基本上是透明无感的,有效地把关注点分离到运维人员这里。另外在基础设施和中间件升级之后的应用运行环境中,应该能够充分利用好HTTP/2在性能和安全性方面的改进,并且给开发人员设计开发RESTful API提供最大的自由度,而不应该越俎代庖人为设置大量限制。笔者很多年前在某大型电商工作时,遇到最搞笑的一件事,是一个中间件的开发负责人规定开发人员在设计开发RESTful API时,只能使用GET和POST方法,只能使用200 OK响应,不允许使用任何自定义header和staus code。

另外运维人员还需要关注HTTP/2内建的流量控制机制,利用好这些机制,可以改善服务器端的可伸缩性。

单纯从学习的角度来看,HTTP是计算机行业有史以来最成功的远程通信协议。HTTP为何会是现在我们看到的这个样子,背后的理论基础是Roy Fielding等人在1990年代后期开创的REST架构风格。HTTP并不是一种传输协议,端到端的数据传输这件工作TCP和UDP已经做的很好了,HTTP完全无意越俎代庖。仅仅将HTTP当作一种传输协议来使用,是非常低效的,是不应该被鼓励的。HTTP其实和FTP、SMTP一样都是应用层的协议。使用HTTP最有效的方式是设计开发真正的RESTful API。RESTful API和所有其他远程API最大的区别是,RESTful API是一种基于网络协议的API,而其他远程API都是基于库的API。RESTful API基于HTTP内建的各种机制来设计和开发,与具体的编程语言完全无关,无论服务器端还是客户端都可以自由选择编程语言(只要能支持HTTP就可以了),这种基于网络协议的API可以带来最大的互操作性、最小的耦合(服务器端和客户端有很大的自由度独立进化)。而这些价值恰好是微服务架构(MSA)所需要的,因此我们看到HTTP在微服务架构中仍然是唱主角的通信协议。

在笔者看来,这种新型的API设计方法——基于网络协议的API,才是HTTP的精华所在,也是HTTP优越性的源头。HTTP解决可伸缩性和安全性等重大问题的思路,与其他远程通信协议差别很大。深入学习理解这种新型的API设计方法,开发人员和运维人员都可以得到很多感悟,最后理解“大道至简”的深刻道理。

注:学习HTTP是锟哥给HTTP/2 in Action这本书写的书评

发表评论

电子邮件地址不会被公开。 必填项已用*标注