如何在 Google Cloud Endpoints 中允许 CORS?

Posted

技术标签:

【中文标题】如何在 Google Cloud Endpoints 中允许 CORS?【英文标题】:How to allow CORS in Google Cloud Endpoints? 【发布时间】:2017-12-22 23:58:14 【问题描述】:

如January 2017 Endpoints release notes 中所述,我尝试更新我的 openapi.yaml 文件,以通过添加到 x-google-endpoints 来阻止可扩展服务代理 (ESP) 阻止跨域请求:

swagger: "2.0"
info:
  description: "Market scan using technical indicators."
  title: "Talib Test"
  version: "1.0.0"
host: "YOUR-PROJECT-ID.appspot.com"
x-google-endpoints:
- name: "YOUR-PROJECT-ID.appspot.com"
  allowCors: "true"
basePath: "/"
consumes:
- "application/json"
produces:
- "application/json"
schemes:
- "http"
...

尝试从我的 Angular 应用程序进行 http 调用时,浏览器中仍然出现错误。该错误出现在开发人员模式和部署我的 Angular 应用程序之后:

XMLHttpRequest cannot load
Response to preflight request doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

当我查看 Google Cloud 日志记录时,我看到 requestMethod:"OPTIONS"status:200。 API 是一个 POST 方法,所以我猜是 ESP 阻止了请求。此外,我已经在我的 python 应用程序中使用FLASK-CORS 允许 CORS,所以它应该可以工作。

我的应用程序有两个服务都在 Google App Engine 上。首先是标准环境。第二个,我遇到的问题是灵活的环境。如果相关,我正在使用 dispatch.yaml 文件和单独的 openapi.yaml 文件。此外,该 API 适用于 hurl it 和邮递员。

任何帮助都会很棒!

【问题讨论】:

【参考方案1】:

很可能您的后端应用程序没有正确处理 CORS OPTIONS。 如果“allowCors”为真,端点代理会将请求传递给您的后端应用程序。代理不会向请求添加任何内容。如果 "allowCors" 为 false,则代理将返回 404。

【讨论】:

谢谢。这是没有正确处理 CORS 的后端。 FLASK-CORS 没有提供正确的标题。我关注 this question 并开始使用烧瓶 after_request 钩子来创建正确的标题。再次感谢 您能否指定 openapi.json 中的“allowCors”:“true”应该添加到哪里?我试过了,但对我没有用 "allowCors" 应该在 "x-google-endpoints" 下指定如下(对于 .yaml): x-google-endpoints: ... allowCors: "true" 你可以看到一个例子.json 规范在这里:cloud.google.com/endpoints/docs/release-notes#upcoming_changes

以上是关于如何在 Google Cloud Endpoints 中允许 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Configuration - 自动启用 Refresh Endpoint 和 Git 监控

从 Java Cloud Endpoint 生成 API 文档

Cloud Endpoint 和 API Gateway (GCP) 是不是支持 Websocket?

Android:如何在GMAIL上获取SSO的YOUR_AUTHENTICATION_ENDPOINT?

如何使用 Google PubSub 确认 (@google-cloud/pubsub)

如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项