【发布时间】:2020-09-15 11:36:31
【问题描述】:
我知道,这里有十亿个 CORS 问题。我经历了几十个。我仍然不确定问题出在哪里,我认为我对 CORS 的理解还不错,但显然我在这里遗漏了一些东西。
我正在尝试让我的 (Node/Express) API 在真实 URL 上运行(即已部署,而不是使用 origin: "*"),并告诉浏览器实际满足来自我的 GUI 的 URL 的请求。
对于某些路由,我需要认证,所以我需要在里面添加credentials。
这是一个非常标准的用例,但自从我上次这样做以来,API 可能发生了一些变化,或者我只是忘记了,但无论如何我似乎无法让它工作,我不确定我在做什么不见了。
似乎有几种方法可以为我的 Express 应用中的所有请求启用 CORS。我目前正在使用 cors 中间件及其选项对象。
具体来说,这是我正在使用的代码。
const app: express.Application = express();
const corsOptions = {
credentials: true,
origin: 'https://my-gui.example.com',
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
preflightContinue: true,
}
app.use(cors(corsOptions));
我做错了什么?当我从浏览器发出fetch 请求时,我收到以下错误。
Access to fetch at 'https://my-api.example.com/graphql' from origin 'https://my-gui.example.com'
has been blocked by CORS policy: Response to preflight request doesn't pass access control
check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an
opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource
with CORS disabled.
如果我在app.use 调用之前添加app.options('*', cors(corsOptions));(为什么我在method 列表中指定OPTIONS 时需要这个,我不知道),我得到一个不同的错误(这导致我相信我出于某种原因确实需要这个)。
Access to fetch at 'https://my-api.example.com/graphql' from origin 'https://my-gui.example.com'
has been blocked by CORS policy: Response to preflight request doesn't pass access control
check: It does not have HTTP ok status.
【问题讨论】:
标签: node.js express cors fetch