那些年,我们使用HTTP1.1,我们忍受着巨大的网络延时,而同时我们的网页变得越来越复杂,我们需要加载的资源越来越大越来越多。
HTTP1.1如何加载资源
-
建立HTTP链接,由于HTTP是基于TCP的,所以必然要经过TCP的三次握手。
-
发送请求,TCP有慢启动的问题。
-
接收响应。
-
如果连接被双方认可是keep-alive的,那么后续请求可复用该连接发送请求。
对,这里面有一个问题,就是一个HTTP连接同一时刻只能处理一个资源的请求,处理完才可能处理下一个。
当然HTTP1.1有一个可选的Pipelining技术,说的意思是当一个HTTP连接在等待接收响应时可以通过这个连接发送其他请求。听起来很棒,其实这里有一个坑,处理响应是按照顺序的,也就是后发的请求有可能被先发的阻塞住,也正因此很多浏览器默认是不开启Pipelining的。
HTTP1.1遇到的问题
-
无法应对越来越多的资源加载数量
-
无法应对越来越大的资源加载体积
-
网络延迟及其严重,Pipelining有让人抓狂的阻塞问题
-
未能榨干TCP的性能
-
过多的可选项带来了严重的互用性问题