是否可以使用Http2跨源推送请求?

Ben*_*min 9 cors http2 http2-lawyers

假设我有一个服务器在网址上提供HTML文件,https://example.com/这是指网址上的css文件https://test.com/mystyles.css.是否可以将mystyles.css文件作为HTTP2连接的一部分与html内容一起推送,以便浏览器使用此css内容?

我试图在我的localhost上使用自签名证书创建这样的请求(我已经为我的浏览器中的两个主机预先创建了一个安全例外),通过在请求到达时发送html文件http://localhost/,然后推送css :authorityHost标头中的不同主机名/端口.但是,在整页刷新时,CSS文件是从服务器的单独请求中获取的,而不是使用推送的css文件.

请参阅此要点以获取我用于测试此文件的文件.如果我访问http://localhost:8080/那么文本是红色的,但如果我访问http://test:8080/它是绿色的,暗示如果原点是相同的,则使用推送的内容.

是否需要使用标头组合才能使用此功能?可能调用CORS?

jon*_*_wu 2

是的,根据2017 年Chrome 开发者倡导者的这篇博文,这在理论上是可能的。

作为developers.google.com/web 的所有者,我们可以让我们的服务器推送包含我们想要的android.com 内容的响应,并将其设置为缓存一年。

...

您无法推送任何来源的资产,但您可以推送您的连接“权威”的来源的资产。

如果您查看developers.google.com 的证书,您会发现它对各种Google 来源(包括android.com)具有权威性。

在 Chrome 中查看证书信息 现在,我撒了一点谎,因为当我们获取 android.com 时,它会执行 DNS 查找,并发现它终止于与 Developers.google.com 不同的 IP,因此它会设置一个新的 IP 地址。连接并错过推送缓存中的项目。

我们可以使用 ORIGIN 框架来解决这个问题。这让连接说“嘿,如果您需要 android.com 的任何内容,只需问我即可。无需执行任何 DNS 操作”,只要它是权威的即可。这对于一般连接合并很有用,但它是相当新的并且仅在 Firefox Nightly 中受支持。

如果您使用 CDN 或某种共享主机,请查看证书,看看哪些来源可以开始为您的网站推送内容。这有点可怕。值得庆幸的是,没有主机(据我所知)提供对 HTTP/2 推送的完全控制,并且不太可能感谢规范中的这个小注释:...

实际上,如果您的证书对其他域具有权限并且它们托管在同一 IP 地址,这听起来似乎是可能的,但这也取决于浏览器支持。我个人尝试使用 Cloudflare 来做到这一点,发现它们不支持跨源推送(类似于博客文章作者在 2017 年对 CDN 的观察)。