拥抱HTTP2.0
本文译自 《Getting Ready For HTTP/2: A Guide For Web Designers And Developers》
超文本传输协议(HTTP2.0)是一个非常成功的协议,现在推出了一个新的版本——HTTP/2。HTTP 2.0 支持所有HTTP/1.1的核心特征,并且能够更有效地利用网络资源,减少感知延迟。通俗的讲,就是更快。
HTTP的历史
HTTP是一个古老的协议,最初于1991年发布,现在使用的版本是于1999年发布的HTTP/1.1。目前的网络环境已经与那个时候有了巨大的改变。现在的主页平均是1.9M大,拥有超过100个资源数目。一个资源是一张图片或者JS、CSS文件。
HTTP/1.1 对于资源数目较多的请求表现的不好。在2009年,2个谷歌的工程师公开了一个研究课题叫做SPDY,列解决了HTTP/1.1 中存在的一些问题:
- 允许一个TCP连接处理多个请求
- 允许浏览器决定资源的优先级,让服务器优先发送重要文件
- 压缩和减少HTTP 头部
- 实现服务器push, 服务器可以推送重要的资源给浏览器
此外,SPDY需要浏览器和服务器之间进行加密连接(使用HTTPS)
SPDY 没有取代HTTP,它是HTTP协议的一个隧道,修改HTTP的请求和响应。它需要浏览器和服务器同时支持。
HTTP/2
HTTP/2 建立在SPDY成功的基础上,因此它也实现了SPDY的目标,但是不需要HTTPS连接。但是现在浏览器的厂商决定只实现HTTPPS的连接。HTTP 2.0是在2015年2月发布的,一年过去了,浏览器对HTTP 2.0 的支持十分可观。 与SPDY一样,HTTP/2也是需要服务器的支持,可以通过查询HTTP wiki得到服务器的支持情况。
网站一定要有所变化吗
HTTP/2 是向后兼容的, 所以现有的网站并不需要任何改动。对用户来说,协议的变化是完全透明的。在HTTP/1.1 时代的一些最佳实践在2.0时代有可能会起到相反的作用。
如何拥抱 HTTP/2
接下来的篇幅讨论原先的最佳实践,采用HTTP 2.0需要改变的东西。对大部分网站来说,转变是一件漫长的事情。首先你的服务器软件得要升级,但是你托管的服务器有可能并不支持。在转向 HTTP/2 之前,你还要确认,你的访客们的浏览器是否支持HTTP/2 。
首先转到私密连接
对于大多数网站来说,转向 HTTP/2 最困难的地方有可能不是 HTTP/2, 而是需要让网站基于安全连接HTTPS。 如果你开发一个新的站点或者将升级你的网站,你首先要转移到HTTPS。 在将来,你会发现一些强大的HTML5特性诸如地理位置,在非私密连接下无法使用。
将多个图片整合到雪碧图中
在 HTTP/1.1 时代,传送一张大的图片会比传送许多小的图片更加有效。所以常常会把一些小的图标整合到一个雪碧图当中。
这个雪碧图发传输只需要一个HTTP 请求,而不会有一系列多个请求出现。但是如果某一个网页只用到雪碧图中的某个图标,它也会将整个雪碧图下载下来。
在 HTTP/2 中,多个请求不再是一件开销巨大的事情,因此,保持小图片会比整合到雪碧图中更加有效。在 HTTP/2 中,雪碧图不再是一个最佳实践。
将图片放在 data URI中
在 HTTP/1.1 中,为了减少HTTP请求,会将图片转换成base64放入data URI中。因为请求的开销在 HTTP/2 中会急剧减少,所以这也不再是一个良好的实践。
使用多个域名存储内容
在HTTP/1.1中每个域名的连接数目是有限制的,为了扩展并发连接的数目,会使用多个独立域名来缓存资源文件。HTTP/2移除了这个限制,你可以创建任意数目的请求。如果继续使用多个域名,反而会使性能下降。因为它会创建更多的TCP连接,并且会影响HTTP/2 对资源优先级的决策。
##其他
在优化网络性能中还有一些实践,将CSS拼接成一个文件,将多个JS文件拼接成一个文件,这些为了减少HTTP请求的实践,在HTTP 2.0 的时代都将被淘汰。因为更多的请求对于 HTTP 2.0 来说并不会增加多少开销。