>假设我有一个服务器在网址https://example.com/
提供HTML文件,这指的是url https://test.com/mystyles.css
的css文件。 是否可以将mystyles.css
文件与 html 内容一起推送作为 HTTP2 连接的一部分,以便浏览器使用此 css 内容?
我尝试在我的本地主机上使用自签名证书创建这样的请求(并且我已经在我的浏览器中为两个主机预先创建了安全例外),方法是在请求到达 http://localhost/
时发送 html 文件,并在 :authority
或 Host
标头中使用不同的主机名/端口推送 css。但是,在整页刷新时,CSS 文件是在来自服务器的单独请求中获取的,而不是使用推送的 css 文件。
请参阅此要点以获取我一直用来测试此内容的文件。如果我访问http://localhost:8080/
则文本是红色的,但如果我访问http://test:8080/
则文本是绿色的,这意味着如果来源相同,则使用推送的内容。
是否需要使用标头组合才能正常工作?可能调用 CORS?
是的,根据 2017 年 Chrome 开发人员倡导者的这篇博文,理论上是可能的。
作为 developers.google.com/web 的所有者,我们可以让我们的服务器 推送包含我们想要的任何 android.com 的响应,并设置 它缓存一年。
。
您无法推送资产 任何源,但您可以为连接的源推送资产 是"权威"的。
如果您查看 developers.google.com 证书,您可以看到 它是各种谷歌起源的权威,包括 android.com。
在Chrome中查看证书信息 现在,我撒了一点谎, 因为当我们获取 android.com 时,它会执行 DNS 查找并查看 它终止于与 developers.google.com 不同的 IP,因此 它将建立一个新连接,并错过推送缓存中的项目。
我们可以使用 ORIGIN 框架来解决这个问题。这让 连接说"嘿,如果你需要 android.com 的任何东西,就问 我。无需做任何DNS工作",只要它是 权威。这对于一般连接合并很有用,但是 这是非常新的,仅在Firefox Nightly中受支持。
如果您使用的是 CDN 或某种共享主机,请查看 证书,查看哪些来源可以开始为您的推送内容 网站。这有点可怕。值得庆幸的是,没有主机(我知道)提供对HTTP/2推送的完全控制,并且不太可能,这要归功于规范中的这个小注释:...
实际上,如果您的证书对其他域具有权限并且它们托管在同一 IP 地址上,这听起来是可能的,但这也取决于浏览器支持。我个人尝试使用 Cloudflare 执行此操作,发现它们不支持跨源推送(类似于博客文章作者在 2017 年对 CDN 的观察)。