[错误] 手动匹配封面预览在使用 COEP require-corp 服务时被阻止
**RomM 版本** 5.2.0 **安装** Docker, 通过反向代理访问 **测试的客户端** 桌面浏览器 (Firefox) Android 移动浏览器 **描述错误** 在 RomM 中,在 RomM 服务器上使用线程式 EmulatorJS 核心所需的跨源隔离头时,匹配 ROM 搜索结果对话框中的封面图片无法加载: http Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp 元数据搜索本身工作正常。结果已返回,名称和提供商信息显示,并且 ROM 可以成功匹配。 然而,搜索结果中的远程封面图片被浏览器阻止。 选择结果并完成匹配后,封面图片在 RomM 中正常显示。 **为什么启用 COOP/COEP** 这些头部是故意启用的,以支持 EmulatorJS 核心(如 DOSBox Pure)所需的 SharedArrayBuffer/线程化 WebAssembly。因此,删除 Cross-Origin-Embedder-Policy: require-corp 并不是一个可行的解决方案,因为它可能会破坏需要跨源隔离的基于浏览器的模拟。 **要重现问题** 1. 通过反向代理服务 RomM,其中: http Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp 2. 在 RomM 中打开一个 ROM。 3. 选择"匹配 ROM"。 4. 使用 IGDB 搜索游戏。 5. 观察搜索结果已成功返回,但其封面图像未加载。 6. 打开浏览器控制台。 例如,Firefox 会报告: text 资源"https://images.igdb.com/igdb/image/upload/..."由于其 Cross-Origin-Resource-Policy 头(或缺失)而被阻止。 7. 选择结果并完成匹配。 8. 观察游戏的封面艺术作品随后在 RomM 中正常显示。 此问题在桌面和 Android 上都发生。 **观察到的行为** 匹配 ROM 对话框似乎直接从第三方图像 URL 加载提供商图片,例如: text https://images.igdb.com/... 由于 RomM 页面使用: http Cross-Origin-Embedder-Policy: require-corp,浏览器拒绝嵌入来自图像主机的跨源图像,除非图像主机返回适当的 Cross-Origin-Resource-Policy 或 CORS 响应。 RomM UI 图形和元数据提供商图标正常显示。 **预期行为** 手动匹配封面预览应在 RomM 配置了支持 EmulatorJS 核心所需的 COOP/COEP 头时显示。 **可能的解决方案** 而不是将提供者的远程图像 URL 直接发送给浏览器,RomM 可以通过自己的后端代理/缓存手动匹配艺术作品,并从 RomM 原生地址提供预览。例如: 浏览器 -> RomM 封面代理 -> images.igdb.com 而不是: 浏览器 -> images.igdb.com 这样做将使预览在浏览器的角度上具有同源性,并使 RomM 能够保留: http Cross-Origin-Embedder-Policy: require-corp ...
内容来源: rommapp/romm