事实上,部署HTTP/2或SPDY并不难。如果你使用NGINX,只要在配置文件中启���相应的协议就可以了,参见这里了解如何启用HTTP/2。浏览器和服务器会协商采用什么协议,如果浏览器支持HTTP/2(而且也在使用TLS),就会使用HTTP/2。
配置完服务器后,使用支持HTTP/2浏览器的用户就会基于HTTP/2运行你的应用,而使用旧版本浏览器的用户则会继续使用HTTP/1.x运行你的应用,如下图所示。如果你的网站流量非常大,那么应该监测改变前后的性能,对于性能降低的情况,可能就得撤销更改。
在服务器支持 HTTP/2 和 HTTP/1.x
注意:使用HTTP/2及其单连接之后,NGINX某些配置的重要性会很明显,特别要注意的是output_buffers、proxy_buffers和ssl_buffer_size等指令,多测试一下。参见常规配置提示,特定的SSL建议(在这里 和 这里),以及NGINX关于SSL性能的白皮书。
注意:使用HTTP/2传输密文要格外注意。HTTP/2的RFC中有一个,列出了要避免的加密套件。建议你自己也搞一个表格,启用ssl_buffer_size,然后在所有常用的浏览器版本下测试你想用的加密套件。
建议六:再谈HTTP/1.x优化你说奇怪不,撤销和修改针对HTTP/1.x优化的代码居然是实现HTTP/2最有创意的部分。这里面有几个问题要注意,因为很多事怎么做都是可以的。
在开始运作之前,必须考虑旧版本浏览器用户是否好过。之后,可以采取三个策略撤销和修改HTTP/1.x的优化。
什么也不用做。假如你并没有针对HTTP/1.x做过优化,或者只做过少量优化,那么你几乎什么也不用做,就可以直接迁移到HTTP/2。
有选择地去做。第二种情况是减少合并某些文件,而不是完全不合并。比如,牵扯到很多场景的图片精灵就不用动,而被塞得满满的HTML可能就要分离出来一些。
完全撤销HTTP/1.x优化(不过请先参考建议七中关于分域存储的建议)。可以不再做以前做过的任何优化。
缓存还是普适的。理论上,缓存操作非常适合小文件特别多的情况。但是,小文件多也意味着文件I/O多。因此一些相近文件的合并还是必要的,一方面要考虑工作流程,另一方面要考虑应用性能。建议多关注一下其他人在过渡到HTTP/2过程中的一些经验。
建议七:实现智能分域分域存储可能是最极端但也最成功的HTTP/1.x优化策略。它能够提升HTTP/1.x下的应用性能,但在HTTP/2之下,其性能提升可以忽略不讲(因为只有一个连接。)
对HTTP/2友好的分域,要保证以下两点。
让多个域名解析到同一个IP。
确保证书包含通配符,以便所有分域名都可以使用,适当的多域证书当然也可以。
具体细节,请参考。
有了这些保障,分域还会继续对HTTP/1.x有效,即域名仍然可以触发浏览器创建更多连接,但对HTTP/2则无效,因为这些域名会被看成同一个域,一个连接就可以访问所有域名了。
小结HTTP/2和TLS组合可以提升你的站点性能,并且让用户觉得你的网站很安全。无论你是率先在自己的应用里实现HTTP/2,还是要赶超竞争对手,都可以又快又好地实现对HTTP/2的支持。
希望这篇文章能让你以最少的努力获得最大的HTTP/2性能收益,而且从此你可以把注意力集中到编写更快、更有效、更安全的应用上,让自己的应用更容易维护和运维。