HTTP协议是互联网WEB应用的基石,这样定义恐怕没有人会反对吧。但是你可知HTTP1从诞生到现在马上就有20年的历史了,这20年互联网已经发生了翻天覆地的变化,然而HTTP1却一直保持它原有的样子默默无闻的支撑着所有的WEB请求,无数的开发者为了提升HTTP1的性能也开创了很多种优化的方法与实战技能,直到HTTP2的出现我们提升WEB性能的方式也随之发生了变化。这篇文章便从HTTP的历史说起一直到最新的HTTP2。
1、追溯HTTP历史
“超文本” 这个词提出是在1963年左右并于1965年首次出现在一名美国软件设计师所发表的文章中。在1989年有了最初的HTTP协议版本也就是0.9版本,现在已经废弃,它只有一个GET方法。在1996年通过了RFC1945制定了HTTP/1.0规范,这是一个很大的进步,这个版本里面已经有我们目前很熟悉的概念了,比如,HTTP首部、响应码、重定向等等。快马加鞭,在1999年便诞生了HTTP/1.1也就是现在我们广泛使用的协议,它比HTTP1.0改进的地方主要有如下几个方面:OPTIONS方法、压缩和传输编码(transfer-encoding)等等。HTTP/1.1定稿之后,它便没有变化也没有任何改进过,截止目前HTTP/1.1版本的协议我们已经即将使用20年了。
2、HTTP1下的优化方法
谈到优化,那么首先看一下影响HTTP性能的指标主要有如下:
1、延迟(我们常说的RTT时间端点之间的往返),
2、带宽,
3、DNS查询,
4、建立连接时间(TCP三次握手),
5、TLS协商时间(HTTPS连接请求下),
6、首字节时间(TTFB,从请求到接收到响应第一字节所耗费的时间),
7、内容下载时间(TTLB),
8、文档加载完成时间,
9、页面复杂度
10、更多的域名,css一个,图片一个,js一个等等。
11、更多的TCP socket ,HTTP/1.1下浏览器客户端会对一个域名开启最多6个socket连接。
另外HTTP/1.1还有几个重要特点:
2.1、队头阻塞
在HTTP/1.1下,如果使用一个连接去请求一个域名下有很多资源,则必须经过发起请求-等等响应-再发起请求这样的过程。在请求应答的过程中,如果出现任何问题包括服务端响应、网络等问题,那么剩下的所有处理都会被阻塞在上次请求应答之后,这就是 “队头阻塞” 问题。即使浏览器客户端会对单个域名开启最多6个socket连接(这个也要跟具体的浏览器来区分比如Firefox是6个,Chrome则是24个)来分发请求,但是每个连接下仍然会受到 “队头阻塞” 的影响。