Apollo Server 重置 CORS 选项 [重复]

Posted

技术标签:

【中文标题】Apollo Server 重置 CORS 选项 [重复]【英文标题】:Apollo Server resetting CORS options [duplicate] 【发布时间】:2021-07-05 10:33:18 【问题描述】:

Apollo 服务器只是忽略我的 CORS 层并应用它自己的选项。

尽管使用选项反映使用以下代码设置 CORS 中间件:

    var corsOptions = 
       origin: true,  //This will just copy the request origin and put it in response
       optionsSuccessStatus: 200, 
       credentials: true, 
    ;
    app.use(cors(corsOptions));

    const apolloServer = new ApolloServer( schema, context , playground: true); 
    await apolloServer.start();

   //Integrate with express
   apolloServer.applyMiddleware(app, path: '/api/graphql', cors: corsOptions);

Apollo 服务器只是忽略了我的 CORS 层并返回 'Access-Control-Allow-Origin' : "\*",因此我收到了 CORS 错误,因为:

当请求的凭据模式为“包含”时,响应中的“Access-Control-Allow-Origin”标头的值不能是通配符“*”。

【问题讨论】:

如果目标是让其他帖子更易于搜索,您可以建议修改其标题,而不是写一个全新的问题。 【参考方案1】:

要解决此问题,您需要直接在 applyMiddleware 方法中提供 CORS 选项。 像这样:

var corsOptions = 
           origin: true,  //This will just copy the request origin and put it in response
           optionsSuccessStatus: 200, 
           credentials: true, 
        ;
apolloServer.applyMiddleware(app, path: '/api/graphql', cors: corsOptions); //WE ADDED CORS HERE

这里有一个link 讨论堆栈溢出问题。

另外,如果有兴趣,offical documentation 会说以下内容。

【讨论】:

以上是关于Apollo Server 重置 CORS 选项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Express CORS 选项

cors错误:没有'Access-Control-Allow-Origin'标头apollo-server-express

Apollo 客户端:在清除或重置存储时保留/重置默认值

如何使用 Express 和 Apollo-Server 获取 HTTP 授权标头

Apollo Server - 关于缓存/数据源选项的困惑

由于 CORS 选项预检,ReactJS 无法发送 POST 请求