2
  • 嗨,Chrome 已经实现了一些使用 SharedArrayBuffer 的要求,我们必须包含两个标头:

Cross-Origin-Opener-Policy:同源 Cross-Origin-Embedder-Policy:require-corp

  • 有什么方法可以在 Github 上使用 SharedArrayBuffer 吗?我尝试过 netlify,但他们对带宽有限制。是否有任何类似于 GitHub 的托管静态站点可以允许我们自定义请求标头以便我们可以使用 SharedArrayBuffer?
4

4 回答 4

2

您可以通过服务工作者(甚至在 Github Pages 上)设置所需的 COOP 和 COEP 标头来使SharedArrayBuffer工作。这篇博文将解释基础知识并向您展示如何操作。

本质上,这个想法是

  1. 当页面第一次加载时,我们注册worker
  2. 然后我们重新加载页面
  3. 最后,既然工作人员正在控制一切,现在每个请求都将设置适当的标头

执行此操作的服务人员必须包含以下内容

// sw.js
self.addEventListener("fetch", function (event) {
  if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
    return;
  }

  event.respondWith(
    fetch(event.request)
      .then(function (response) {
        const newHeaders = new Headers(response.headers);
        newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
        newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");

        const moddedResponse = new Response(response.body, {
          status: response.status,
          statusText: response.statusText,
          headers: newHeaders,
        });

        return moddedResponse;
      })
      .catch(function (e) {
        console.error(e);
      })
  );
});

我刚刚创建了一个小型库以使其更容易:coi-serviceworker

于 2021-08-06T02:08:22.907 回答
1

截至 2021 年 8 月,GitHub 页面无法使用 COOP/COEP 标头提供服务。作为具有自定义标头的替代静态文件服务器,Firebase 托管可能是一种选择。我不熟悉其他选项。

于 2021-08-03T05:12:47.717 回答
0

看起来 Github 没有添加自定义标头的意图,在 2011 年发现了同样的问题,直到现在仍然没有这个Github 页面,HTTP 标头

于 2021-08-04T01:15:40.290 回答
0

我尝试过 netlify,但他们对带宽有限制。

我使用 Cloudflare Workers 添加此类标头。它们不会在带宽方面限制您(这对大量 WebAssembly 文件很有用),但它们确实对免费计划的请求数量有限制 - 每月 10,000,000 个请求。https://developers.cloudflare.com/workers/platform/pricing

不过公平地说,这个限制通常很难在小型演示中达到(这是 Github Pages 通常的用途),之后价格也不是很陡峭(每增加 100 万个请求需要 0.50 美元)。

于 2021-08-06T02:08:39.137 回答