REST API 可以作为 CORS 问题的代理吗?

Posted

技术标签:

【中文标题】REST API 可以作为 CORS 问题的代理吗?【英文标题】:Can a REST API works as a PROXY for CORS issues? 【发布时间】:2019-05-11 12:37:02 【问题描述】:

我的问题如下:

我正在使用 Angular 开发一个 Web 应用程序。 Angular 应用程序在客户端的浏览器上运行。在其逻辑中,我的应用程序需要来自 other-domain.com 的数据。 由于 CORS 策略问题,我不能直接使用 XMLHttpRequest()。 (生成数据的网络服务器 other-domain.com 不是我的域,无法添加“Control-Access-Allow-Origins”)

所以不要有:

Angular ===>> other-domain.com(由于 CORS 被禁止)

我正在创建一个 REST API,它将从 other-domain.com 获取数据,并在发送到客户端之前使用标头 'Access-Control-Allow-Origin' : '*' 包装这些数据角度。

所以我的工作流程变成了:

Angular ==>> 我的 API 服务器 ==>> other-domain.com(允许,因为对其他域的请求不在浏览器上执行)

你认为我的想法在任何请求(GET、POST、添加 cookie 标头)中都适用吗?在那种情况下,我正在开发的 API 充当代理,对吗?

谢谢

【问题讨论】:

如果是http-conly,如何从远程服务器获取cookie? 在我的 API 服务器中,我正在向 other-domain.com 发出 HTTP 请求。在我从其他域返回的响应中,我可以提取标头(以及相应的 cookie) 好的,你可以从远程服务器获取httponly cookie吗?我不知道,只是问 【参考方案1】:

简短的回答:是的。事实上,有packages 和sites 可以为你做这件事。

但我认为另一个问题是为什么您需要规避 CORS 限制。毕竟,它正在按预期工作,而且它的存在首先是有原因的。

如果您已经有后端,是否可以添加一个端点,您的后端将在其中调用另一个域,并让浏览器只在您的域内进行通信?

如果您只进行 RESTful GET 并且不透明的请求(无凭据、无 cookie 等)将满足您的需求,您也可以将 fetch api 与 mode: 'no-cors' 一起使用;但是,您需要“绕过”HttpClient 才能这样做,如果您需要支持 IE,则需要一个 polyfill。

【讨论】:

以上是关于REST API 可以作为 CORS 问题的代理吗?的主要内容,如果未能解决你的问题,请参考以下文章

我的请求是跨源请求吗?(heroku 上的 Django rest api,CORS 没有阻止我的请求)

可以使用中间层作为 API 绕过 CORS 吗?

为 REST API 启用 CORS 支持

从 Ajax 调用 Spring Boot Rest API 时出现 CORS 错误

SpringBoot rest-api+Vue CORS跨域.md

Tableau 可以连接到任意 REST API 作为数据源吗?