You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

云端服务器报'SharedArrayBuffer is not defined'错误,本地运行正常

问题描述

我已启用SharedArrayBuffer,本地环境运行正常,但部署到Azure测试环境后无法正常工作。为启用SharedArrayBuffer,我添加了以下CORS头:

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

测试环境未使用Nginx或其他负载均衡器,本地与云端服务器的curl -I结果完全一致:

本地环境:

X-Powered-By: Express
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Content-Type: text/html; charset=utf-8
Content-Length: 6293
ETag: W/"1895-PaoXXUQuEWUDQDGVTFEVesWjsgU"
Vary: Accept-Encoding
Date: Wed, 30 Nov 2022 07:00:32 GMT
Connection: keep-alive
Keep-Alive: timeout=5

云端服务器:

X-Powered-By: Express
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Content-Type: text/html; charset=utf-8
Content-Length: 6293
ETag: W/"1895-NZTN58jpvKWWO2z5SgAnAyNn4Tk"
Vary: Accept-Encoding
Date: Wed, 30 Nov 2022 06:59:55 GMT
Connection: keep-alive
Keep-Alive: timeout=5

补充说明:我正在使用ffmpeg.wasm,已在Firefox、Chrome和Edge中测试过,尝试添加Cross-Origin-Resource-Policy: cross-origin但无效果。请问是否需要在Azure或其他地方进行额外配置?


解决方案

以下是针对Azure环境下SharedArrayBuffer失效的排查和修复方向:

  1. 确认HTTPS配置
    SharedArrayBuffer在现代浏览器中仅允许在HTTPS环境下使用(localhost除外)。检查Azure测试环境是否已配置有效的SSL证书,确保页面通过HTTPS访问。如果使用Azure App Service,默认会提供HTTPS,但需确认是否强制跳转,避免用户通过HTTP访问导致功能失效。

  2. 检查Azure App Service的附加头或安全设置

    • 登录Azure Portal,进入你的App Service资源,查看配置 > 应用程序设置中的HTTP_HEADERS部分,确认是否有自动添加的头与你设置的Cross-Origin-Opener-Policy/Cross-Origin-Embedder-Policy冲突。
    • 检查安全性 > CORS设置,确保此处的配置没有覆盖Express返回的头。如果Azure CORS设置中添加了允许的源,可能会影响页面的孤立上下文状态。
  3. 排查ffmpeg.wasm资源加载问题
    ffmpeg.wasm依赖多个资源(worker脚本、.wasm文件、核心库),这些资源必须符合require-corp的要求:

    • 确保所有ffmpeg相关资源(包括从CDN加载的)都返回正确的Cross-Origin-Resource-Policy头(如cross-origin或same-origin,根据资源来源)。
    • 如果是自行托管这些资源,在Express中为这类静态资源添加对应的CORP头,示例:
      app.use('/ffmpeg', express.static('path/to/ffmpeg', {
        setHeaders: (res) => {
          res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
        }
      }));
      
  4. 检查页面中第三方资源的兼容性
    即使你的主页面头配置正确,若页面中加载了第三方脚本(如统计、广告、分析工具)或资源(如字体、图片)未满足COEP要求,浏览器会拒绝进入孤立上下文,导致SharedArrayBuffer无法启用。

    • 打开浏览器开发者工具(F12),切换到控制台标签,查看是否有类似Cross-Origin Embedder Policy: require-corp相关的错误提示,定位违规资源。
    • 移除或替换不符合要求的第三方资源,或者联系资源提供者添加对应的CORP/COEP头。
  5. 验证孤立上下文状态
    在浏览器控制台执行以下代码,确认页面是否成功进入孤立上下文:

    console.log(window.crossOriginIsolated);
    

    如果返回false,说明页面未满足COOP/COEP的要求,需重新检查头配置和资源加载情况;返回true则表示上下文正常,问题可能出在ffmpeg.wasm的具体实现上。


内容的提问来源于stack exchange,提问作者Badri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:05:15