为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在不同域之间进行 http2 推送资产?

是否可以在不同域之间进行 http2 推送资产?

PHP
qq_花开花谢_0 2021-12-24 16:03:03
我有主站点(site.com)和我的资源(css、images、js)所在的站点(somecdn.com)。我想在登录之前推送一些这些资源。我发送 ajax 请求并在响应头中设置 Link-s 与资源。但是我的资源下载等待并且没有任何推送(见附图)。如何为 somecdn.com 中的资源启用 http2 推送? 有推 无推我在 docker 中创建了两个站点:site.com 和 somecdn.com 并检查 http2 push 是否在这两个站点上正常工作(并且分别按预期工作)。https://127.0.0.1:8081/index.php<!doctype html><html><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <h1>IndexPHP</h1></iframe>-->    <script>        window.onload = function () {            var xhr = new XMLHttpRequest();            xhr.open('GET', 'https://127.0.0.1:8083/push.php', true);            xhr.send();        }    </script></body></html>https://127.0.0.1:8083/push.php<?phpheader("Link: </style.css>; rel=preload; as=style", false);header("Link: </image.png>; rel=preload; as=image", false);我希望无需等待即可在 Chrome 开发工具资源中看到“推送”指示。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

不,不可能为另一个域推送资源。来自HTTP/2 规范

服务器必须在 ":authority" 伪头字段中包含一个值,服务器对其具有权威性(参见第 10.1 节)。客户端必须将服务器不具有权威性的 PUSH_PROMISE 视为 PROTOCOL_ERROR 类型的流错误(第 5.4.2 节)。

您可以使用这些标头预加载请求,这会给浏览器提示以高优先级获取它们,甚至在它稍后看到对资源的实际请求之前。

事实上,许多人无论如何都推荐预加载而不是推送,因为推送非常复杂,没有缓存感知,因此很容易被过度推送滥用,从而导致性能损失,因此它的好处值得怀疑。这就是HTTP/2 推送的使用率仍然如此之低的原因

在 HTTP/2 下通常不鼓励使用像这样的分片域,因为它失去了 HTTP/2 的许多优点,HTTP/2 旨在出于性能原因转移到单个连接。有关此问题的详细解释,请参阅此博客文章:https : //csswizardry.com/2019/05/self-host-your-static-assets/


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号