问题描述
我正在使用 LocalStack 复制 AWS 服务。
我的 Lambda 和 API 网关在 LocalStack 中的运行方式与它们在 AWS 中的运行方式大致相同。我已经使用 Rest API 工具进行了测试以进行验证。但是,当我使用 Apollo Client 在浏览器中运行相同的查询时,LocalStack 版本不再有效。
我为给定的 GraphQL 尝试了 3 种不同的浏览器,当我通过“网络”选项卡进行检查时,只有 Firefox 显示任何数据。 Apollo 总是在位置 1 处出现 JSON 解码错误。请求总是返回 200 状态代码。
我们的客户端设置是:
import { ApolloClient,InMemoryCache,createHttpLink } from '@apollo/client';
import 'cross-fetch/polyfill';
const httpLink = createHttpLink({
uri: 'http://example.com/graphql',credentials: 'include',// Allow other domains too
fetchOptions: {
mode: 'no-cors',},});
export const client = new ApolloClient({
link: httpLink,cache: new InMemoryCache(),});
Apollo 中是否可能存在一些 CORS 问题?我很确定我在网关、access-control-allow-origin: http://localhost:3000
、Content-Type: application/json
等中正确设置了标头。
有没有人看到过类似的错误?
更新
我发现从 no-cors
切换到 cors
允许它使用已知的良好 URL 工作。
好像是:
- 设置
cors
时,会进行预检。此OPTIONS
请求提供了许多响应标头,其中的Access-Control-Allow-Origin
必须设置为请求域。 - 当设置
no-cors
时,没有预检,无论出于何种原因,响应都会被拒绝,即使它也包含正确的Access-Control-Allow-Origin
。 我使用与cors
选项配合使用的网址进行了测试。
总结
- 此时,LocalStack 无法提供正确的
OPTIONS
响应,请参阅 https://github.com/localstack/localstack/issues/4204,这使我无法使用cors
。 - 使用
no-cors
失败,即使我使用已知的良好网址也是如此。
我已经放弃了 LocalStack,转而直接从 AWS 使用 API Gateway。
我希望这会有所帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)