设置:
- 服务 A(前端):GAE 服务静态站点,从 A 发出的所有调用都发生在客户端。
- 服务 B (api):GAE 实例托管 REST API。
如果没有 Identity Aware Proxy,我可以通过将 CORS 设置为允许来自服务 A 主机名的调用,从前端的客户端向不同主机名上的 api 发出请求。
我希望能够在两种服务都在 Identity Aware Proxy 之后做同样的事情。
按照IAP 文档中的说明,我有:
- 设置我的应用程序以响应 OPTIONS 请求
- 使用 gcloud CLI 将 access_settings.cors_settings.allow_http_options 设置更改为 true。
这是我面临的错误:
Access to XMLHttpRequest at 'https://api-dot-my-app-dev.appspot.com/api/123' from origin 'https://frontend-dot-my-app-dev.appspot.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
当我从 localhost 到 localhost 或从服务 A(客户端)到 localhost api 发出相同的请求时,请求成功。
这让我相信这个问题与 Identity Aware Proxy 有关。我唯一的猜测是它与预检请求有关,我在浏览器控制台的网络请求中看不到任何内容。
我真的很希望能够让这两个应用程序使用自己的主机名保持在 IAP 之后,同时仍然进行通信。不幸的是,我对如何做到这一点有很多想法。
与此同时,我现在使用下面的替代#2 来工作。
备择方案:
- 让 API 为静态站点提供服务,以便它们位于相同的主机名上
- 使用dispatch.yaml从相同的主机名服务两个站点
如果这是可能的或可能出了什么问题,有什么想法吗?
编辑:这是一个演示我的问题的仓库。
编辑 2:根据这篇文章,这个功能曾经可以工作,谷歌表示支持它是个好主意,但没有提供时间表。