【发布时间】:2021-01-24 14:40:11
【问题描述】:
我正在测试新的 API 网关以保护我的 React 应用程序的云功能。到目前为止,该过程比以前的替代方案要好得多,但是当我尝试从我的 React 应用程序访问我的 API 网关时,我目前遇到了 CORS 错误。我在我的 Cloud Function 中正确设置了 CORS 标头,但我不知道在 API Gateway 端点上执行相同操作的方法。我正在使用 Postman 测试对网关端点的请求,并且一切正常,所以它只是在我从我的 React 应用程序请求时。
错误:“从源 'https://example.netlify.app' 访问 'https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello?key=example' 已被阻止CORS 策略:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors” ' 来获取禁用 CORS 的资源。"
希望对这个问题有所了解。谢谢!
【问题讨论】:
-
解决方案:正确答案是@user14982714 回答的那个。我将在下面添加更多说明的答案。经过无数小时的调试,我发现 Google API Gateway 在后台使用了 Endpoints。这意味着如果您使用 allowCors 添加 x-google-endpoints 属性,则处理将传递到您的服务器,您可以在其中手动处理它。
-
我刚刚添加了一个包含更多细节的解决方案。如果将来有人偶然发现这一点,请务必检查一下。在 openapi.yaml 中添加选项作为路径并调用返回正确标头的函数对于复杂的 API 来说不是可行的解决方案。 @ElektrikSpark 请检查一下,然后尝试一下。
标签: reactjs google-cloud-platform google-cloud-functions cors google-cloud-api-gateway