Tomcat 发送 "Cross-Origin-Opener-Policy" 和 "Cross-Origin-Embedder-Policy" Headers 以在 JavaScript 上启用 SharedArrayBuffer

Tomcat Send "Cross-Origin-Opener-Policy" and "Cross-Origin-Embedder-Policy" Headers to Enable SharedArrayBuffer on JavaScript

我构建了一个 React 17.0.2 应用程序,它具有使用“SharedArrayBuffer”的依赖项 (ffmpeg.wasm)。这需要这些 Response Headers as per the docs:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

我通过 Tomcat 为 React 应用程序提供服务 10. 如何修改默认 web.xml 以包含那些 headers?

更新 1:

我找到了一些我认为可以发送这些文件的文档 headers,我只是不知道要在 web.xml 中放入什么才能实现.

This doc says that to enable CORS on Tomcat, you can use the filter tag. It also says, "This filter is an implementation of W3C's CORS (Cross-Origin Resource Sharing) specification". The specification they reference 包括这两个 headers:

解法:

由于没有本地方式发送这些响应 headers,我不得不使用 this code 来添加它们。我 运行 git 克隆,确保我有 CATALINA_HOME 设置,运行 make.sh,将生成的 .jar 移动到 [=60= 中的 lib/ 目录],并将权限与周围的罐子相匹配。我在 web.xml 中写了两个过滤器并重新启动 Tomcat.

<filter>
    <filter-name>OpenerPolicyHeaderFilter</filter-name>
    <filter-class>StaticHeaders</filter-class>
    <init-param>
        <param-name>Cross-Origin-Opener-Policy</param-name>
        <param-value>same-origin</param-value>
        </init-param>
</filter>
<filter-mapping>
    <filter-name>OpenerPolicyHeaderFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>EmbedderPolicyHeaderFiler</filter-name>
    <filter-class>StaticHeaders</filter-class>
    <init-param>
        <param-name>Cross-Origin-Embedder-Policy</param-name>
        <param-value>require-corp</param-value>
        </init-param>
</filter>
<filter-mapping>
    <filter-name>EmbedderPolicyHeaderFiler</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

CORS 筛选器仅处理 Access-Control-* headers 而不会对 Cross-Origin-* headers.

做任何事情

如果您希望设置 Cross-Origin-* headers,您要么必须自己管理,要么向 Tomcat 项目提交 pull-request。