是否可以进行Http2跨域推送请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以进行Http2跨域推送请求?相关的知识,希望对你有一定的参考价值。

说我有一个服务器,它在URL https://example.com/处提供html文件,而这是指在URL https://test.com/mystyles.css处的CSS文件。是否可以将mystyles.css文件与html内容一起推送到HTTP2连接中,以便浏览器将使用此CSS内容?

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

请参阅this gist了解我一直用于测试此文件的文件。如果我访问http://localhost:8080/,则文本为红色,但是如果我访问http://test:8080/,则文本为绿色,这意味着如果原点相同,则使用推送的内容。

是否需要使用标头组合才能使其正常工作?可能调用了CORS?

答案

是,根据2017年的blog post from a Chrome developer advocate,理论上是可能的。

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

...

您不能为任何来源,但您可以将资产推入与您的联系相关的来源是“权威”的。

[如果您查看developers.google.com的证书,则可以看到它对各种Google血统都具有权威性,包括android.com。

在Chrome Now中查看证书信息,我撒了一点谎言,因为当我们获取android.com时,它将执行DNS查找并查看它终止于与developers.google.com不同的IP,因此它将建立一个新的连接,并在推送缓存中丢失我们的项目。

我们可以使用ORIGIN框架解决此问题。这使连接说“嘿,如果您需要android.com提供的任何功能,请问我。不需要做任何DNS东西”,只要它是权威性。这对于常规连接合并很有用,但是它是非常新的,仅在Firefox Nightly中受支持。

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

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

以上是关于是否可以进行Http2跨域推送请求?的主要内容,如果未能解决你的问题,请参考以下文章

http2续

http2学习

是否可以对 application/json 进行跨域 POST ajax 请求?

NodeJs 中的 http、https 和 http2

http2提升效率的几个点

极客漫画:HTTP2 服务器推送