如何在 Google Cloud Endpoints 中允许 CORS?

How to allow CORS in Google Cloud Endpoints?

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

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 云日志时,我看到 requestMethod:"OPTIONS"status:200。 API 是一个 POST 方法,所以我猜是 ESP 阻止了请求。此外,我已经在我的 python 应用程序中使用 FLASK-CORS 允许 CORS,因此它应该可以正常工作。

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

任何帮助都会很棒!

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