首页 > 解决方案 > 我们可以 HTTP 2 服务器推送其他 CDN 中的资产吗?

问题描述

目前,我的 Angular 应用程序的 index.html 文件是从 tomcat 服务器(Apache Coyete)生成的。index.html 文件由指向我们自己的 CDN 的 js、css 和图像组成。例子:

<script src="https://mc1.mcdn.in/main.adjhf432hjh23k44.js" />

假设我想服务器推送“ https://mc1.mcdn.in/main.adjhf432hjh23k44.js ”文件。是否可以服务器推送 CDN 链接?另外,有没有办法服务器推送所有匹配模式的文件?像 main.{hash}.js polyfills.{hash}.js 等

标签: angulartomcatcdnhttp2

解决方案


您只能从对资源域具有权威性的连接推送项目。从 HTTP/2 规范

客户端必须将服务器不具有权威性的 PUSH_PROMISE 视为 PROTOCOL_ERROR 类型的流错误...

因此,如果索引文件也通过 CDN 提供服务,那么您可以在该连接上推送静态资产。但是,如果 index.html 是从单独的域和 IP 地址提供给资产的,那么它们就不能被推送。

鉴于 HTTP/2 推送的复杂性和浏览器支持,您可以使用预加载资源提示来确定项目(尤其是后期发现的资源)的优先级,许多人建议将其设置为四个。


推荐阅读