如何在 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 中配置频道选项