Http2跨域推送请求是否可能?

本杰明

假设我有一台服务器,该服务器在url处提供HTML文件,https://example.com/而这是在url处引用css文件https://test.com/mystyles.css是否可以将mystyles.css文件与html内容一起推送到HTTP2连接中,以便浏览器将使用此CSS内容?

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

请参阅此要点,以获取我一直用于测试此文件的文件。如果我访问,http://localhost:8080/则文本为红色,但是如果我访问http://test:8080/,则文本为绿色,这表示如果来源相同,则使用推送的内容。

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

jon_wu

是的,根据2017年Chrome开发者倡导者的这篇博客文章,从理论上讲,这是可能的

作为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的观察)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从https站点到http站点发出跨域请求是否可行?

来自分类Dev

从https站点向http站点发出跨域请求是否可行?

来自分类Dev

角度2:如何检测HTTP请求是否完成?

来自分类Dev

AngularJS的跨域$ http请求

来自分类Dev

跨域$ http请求AngularJS

来自分类Dev

当我进行http2推送时,我向服务器发出请求?

来自分类Dev

快速检测请求是否来自子域?

来自分类Dev

http2:推送承诺数据的顺序

来自分类Dev

跨域HTTP请求在AngularJS中失败

来自分类Dev

使用AJAX发送HTTP跨域请求

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

如何创建跨域HTTP请求

来自分类Dev

判断HTTP请求是否保持活动状态

来自分类Dev

Python 请求是否真的连接到 http 代理?

来自分类Dev

REST Web 服务上的 HTTP GET 请求是否安全?

来自分类Dev

Java的 - 让使用多个请求HTTP2

来自分类Dev

使用 python 请求发送跨域请求:HTTP for Humans

来自分类Dev

SPDY / HTTP2是否串联响应?

来自分类Dev

SPDY / HTTP2是否串联响应?

来自分类Dev

Jetty HTTP2服务器推送支持

来自分类Dev

跨域请求被阻止

来自分类Dev

跨域请求被阻止:

来自分类Dev

什么是跨域请求

来自分类Dev

跨域请求被阻止

来自分类Dev

jQuery跨域请求

来自分类Dev

CrossRef Search API是否支持跨域请求?

来自分类Dev

如何使用http-client向Aurelia请求跨域

来自分类Dev

AngularJS http.get()跨域请求被阻止