[英]Is it possible to http2 push assets among different domains?
我有主站點(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 lang="en">
<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
<?php
header("Link: </style.css>; rel=preload; as=style", false);
header("Link: </image.png>; rel=preload; as=image", false);
我希望能在Chrome開發者工具資源中看到它們,而無需等待並且帶有“推送”指示。
不,不可能將資源推送到另一個域。 根據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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.