当浏览器选项卡的顶级 window.crossOriginIsolated == false 时,可能有 WorkerGlobalScope.crossOriginIsolated == true 吗?如果是的话怎么办?

问题描述 投票:0回答:1

我正在尝试使用 SharedArrayBuffer,这需要设置 COOP 和 COEP 标头,以便 window.crossOriginIsolated==true。
我已经这样做了,而且效果很好。 但由于我无法详细说明的原因,我可能无法为整个网站设置这些标题。 该网站由 Express JS Web 服务器提供服务,我一直在使用更简单的示例,因此我可以对测试进行无限控制。

在阅读 WorkerGlobalScope 的 MDN 页面时,它提到 crossOriginIsolated (cOI) 是它的一个属性。 目前尚不清楚 WorkerGlobalScope 的 cOI 是否与顶级窗口的 cOI 相关,尽管(特别是在测试之后)我怀疑可能是这种情况。

为了测试,我尝试仅发送子目录 ./dist 下文件的 COOP 和 COEP 标头,以便浏览器通过正确设置这些标头来获取定义工作人员的 JavaScript 文件 - 我已经确认了这一点。

app.use( "/dist/*", ( req, res, next ) => { console.log( `Requesting file: ${req.baseUrl}` ); res.setHeader("Cross-Origin-Opener-Policy", "same-origin"); res.setHeader("Cross-Origin-Embedder-Policy", "require-corp"); next(); } );
从 Chrome Devtools 的“网络”选项卡:

请求网址:http://localhost/dist/mainworker.mjs 请求方式:GET 状态代码:200 正常 推荐人策略:跨源时严格源 。 。 。 内容类型:应用程序/javascript;字符集=UTF-8 跨域嵌入器策略:require-corp 跨域开启策略:同源
但是,WorkerGlobalScope.crossOriginIsolated 是 false。

我的怀疑是否正确 - WorkerGlobalScope.crossOriginIsolated 与顶级窗口有着千丝万缕的联系? 或者是否有人能够创建一个 cOI 为 true 而主选项卡窗口的 cOI 为 false 的 Web Worker?

谢谢

javascript browser web-worker cross-origin-resource-policy cross-origin-opener-policy
1个回答
0
投票
嗨,如果我不工作,我认为您正在使用 ohif 查看器。在过去的 20 天里,我也遇到了 window.crossOriginIsolated is false 的问题:(。当我使用 coop 和 coep 和 corp 标头访问 cmd 到 express-> server.js 并直接访问 locahost:8080/ 时,一切正常。但是当我将它集成到我现有的react js和django中时,我为coop和coep添加了自定义middleware.py,但仍然没有用......即使我的reactjs和django本身也没有显示window.crossOriginIsolated true,尽管添加了标头。帮助我。我的应用程序完全没有任何 cors 错误,反应 js 和 django 的 api 事务工作正常,这是针对 cors 问题的自定义中间件。

from django.http import HttpResponse class CrossOriginIsolationMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # Handle OPTIONS preflight request (for CORS) if request.method == 'OPTIONS': response = HttpResponse() response['Access-Control-Allow-Origin'] = 'http://localhost:3000' # Specify the frontend origin response['Access-Control-Allow-Credentials'] = 'true' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization' response['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS, PUT, DELETE' return response response = self.get_response(request) response['Access-Control-Allow-Origin'] = 'http://localhost:3000' response['Access-Control-Allow-Credentials'] = 'true' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization' response['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS, PUT, DELETE' if request.path.startswith('/dicomweb/'): response['Cross-Origin-Opener-Policy'] = 'same-origin' response['Cross-Origin-Embedder-Policy'] = 'require-corp' response['Cross-Origin-Resource-Policy'] = 'cross-origin' # Changed to same-origin for better isolation elif request.path.startswith('/api/'): response['Cross-Origin-Opener-Policy'] = 'same-origin' response['Cross-Origin-Embedder-Policy'] = 'require-corp' response['Cross-Origin-Resource-Policy'] = 'cross-origin' return response

我的settings.py有

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'main.middleware.CrossOriginIsolationMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'csp.middleware.CSPMiddleware', ]

请帮助将 window.crossOriginIsolated 设置为 true

© www.soinside.com 2019 - 2024. All rights reserved.