0

我一直在开发一个网站,使用 express(NodeJS) 作为后端,使用 React 作为前端。由于此错误“ReferenceError:SharedArrayBuffer 未定义”,我遇到了我的应用程序无法在 Firefox 上运行的问题。在网上搜索了一下之后,它似乎与CORS有关。我看到在 Chrome 上也有关于使用 SharedArrayBuffer 的警告。

所以我读到我需要设置这些标题 ̀Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp

但我不确定如何做到这一点。在我的后端,我一直在使用 cors 包来设置我的 cors 标头和选项

const corsOptions = {
  origin: process.env.CLIENT_URL,
  credentials: true,
  'allowedHeaders': ['sessionId', 'Content-Type'],
  'exposedHeaders': ['sessionId'],
  'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
  'preflightContinue': false
}
app.use(cors(corsOptions)); 

我也尝试过使用这种方法,但它似乎也不起作用:

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
  res.setHeader('Cross-origin-Embedder-Policy', 'require-corp');
  res.setHeader('Cross-origin-Opener-Policy','same-origin');
  next();
});

我完全错过了什么/误解吗?这是我第一次开发 Web 应用程序,此时我有点迷失了。任何帮助将不胜感激。

谢谢

4

2 回答 2

2

不知道是什么原因造成的,但对我来说使用不同的路线有效

使用node/express进行跨域隔离

app.use(function(req, res, next) {
  res.header("Cross-Origin-Embedder-Policy", "require-corp");
  res.header("Cross-Origin-Opener-Policy", "same-origin");
  next();
});


app.get('/', async (req, res) => {
  res.sendFile(path.join(__dirname, 'public/index.html'));
});
// does **not** work, no cors headers in response

app.get('/app', async (req, res) => {
  res.sendFile(path.join(__dirname, 'public/index.html'));
});
// does work, cors headers in response as expected
于 2021-06-07T12:50:05.960 回答
0

尝试在您的自定义中间件中处理选项请求

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
  res.setHeader('Cross-origin-Embedder-Policy', 'require-corp');
  res.setHeader('Cross-origin-Opener-Policy','same-origin');

  if (req.method === 'OPTIONS') {
    res.sendStatus(200)
  } else {
    next()
  }
});
于 2021-04-10T20:31:44.260 回答