已配置CORS仍报错:GraphQL跨域请求被阻止求助
GraphQL CORS跨域问题复现
问题详情
客户端向 https://my-server.com/graphql 发起GraphQL查询时,浏览器触发CORS拦截错误:
从源 'https://my-client.com' 获取 'https://my-server.com/graphql' 的访问权限被CORS策略阻止: 对预检请求的响应未通过访问控制检查:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。 若不透明响应可满足需求,请将请求模式设置为 'no-cors' 以禁用CORS获取资源。
此前曾通过在Express服务端配置CORS中间件解决该问题,但近期无明确相关代码改动的情况下,问题再次出现。本地环境(客户端localhost:3000、服务端localhost:4000)运行时无此错误。
过往有效配置
Express服务端的CORS中间件配置:
const app = express(); app.use(cors({ origin: ['http://localhost:3000', 'https://studio.apollographql.com', "https://my-client.com"], credentials: true }))
客户端实现细节
- 使用GraphQL Code Generator生成查询钩子,示例代码:
export function useUsersQuery(baseOptions?: Apollo.QueryHookOptions<UsersQuery, UsersQueryVariables>) { const options = {...defaultOptions, ...baseOptions} return Apollo.useQuery<UsersQuery, UsersQueryVariables>(UsersDocument, options); }
- 查询执行代码:
const { data, loading, error } = useUsersQuery()
依赖版本信息
apollo-server-express@3.11.1 express@4.18.2 cors@2.8.5
补充说明
预检请求的响应中未包含 Access-Control-Allow-Origin 标头。
内容的提问来源于stack exchange,提问作者sev
相关产品推荐
相关产品推荐

