猿问

HTTP/2 Server Push 如何利用?

更多生产情况下,静态资源是放在单独的服务器或其他第三方服务器。那么如何利用ServerPush将静态资源推送给客户端?
HTTP/2的ServerPush还能在哪些方面发挥作用?
ABOUTYOU
浏览 309回答 2
2回答

哈士奇WWW

服务端只能根据客户端请求返回额外的Push流,Push流和正常的响应流需要在同一个TCP连接中,所以一般要求要Push的资源和主页面由同一个服务端输出。HTTP/2中的ServerPush被设计为替代HTTP/1.x中为了节省连接数所引入的「资源inline」方案。因为inline无法被缓存,会导致第二次访问浪费了流量,多页面之间的公共资源被inline后也无法利用缓存;图片base64后还会变大1/3。这些问题,可以通过将inline资源写入用户的localStorage,并通过Cookie标记用户当前版本,达到优化第二次访问页面体积的效果。详细可以查看我的这篇文章《HTTP/2与WEB性能优化(一)》。另外HTTP/2的ServerPush主要目的是为了减少时延,服务端要推送资源时,会发送一个PUSH_PROMISE帧,然后接着发出HEADER和DATA帧,客户端如果发现服务端要推送的资源本地有缓存,可以返回一个RST_STREAM终止流,节省传输。这个过程可能会造成一定程度的流量浪费,但是时延还是减少了。这部分内容,可以查看我的这篇文章《HTTP/2中的ServerPush讨论》。这里有H2O的作者KazuhoOku,aria2的作者TatsuhiroTsujikawa,以及《High-PerformanceBrowserNetworking》的作者IlyaGrigorik关于ServerPush的讨论。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答