假设我有一台服务器,该服务器在url处提供HTML文件,https://example.com/
而这是在url处引用css文件https://test.com/mystyles.css
。是否可以将mystyles.css
文件与html内容一起推送到HTTP2连接中,以便浏览器将使用此CSS内容?
我试图通过在本地主机上使用自签名证书创建这样的请求(并且我已经在浏览器中为两个主机预先创建了一个安全异常),方法是在请求到达时发送html文件http://localhost/
,然后使用:authority
或Host
标头中的主机名/端口不同。但是,在整页刷新中,将从服务器发出的单独请求中获取CSS文件,而不是使用推送的CSS文件。
请参阅此要点,以获取我一直用于测试此文件的文件。如果我访问,http://localhost:8080/
则文本为红色,但是如果我访问http://test:8080/
,则文本为绿色,这表示如果来源相同,则使用推送的内容。
是否需要使用标头组合才能使其正常工作?可能调用了CORS?
是的,根据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] 删除。
我来说两句