我正在使用ReactJS开发一个应用程序,该应用程序使用Hyperion提供的rest API与另一个Enterprise应用程序(Oracle Hyperion)通信。问题在于该API未得到正式支持,并且不支持CORS。我试图找到解决该问题的方法,但没有成功。
在尝试解决另一个问题时,我创建了一个Python Flask应用程序,并使ReactJS应用程序与Hyperion Rest API之间的所有通信都通过它。不知何故,这使正在发生的CORS错误消失了。我在Flask应用中使用了以下导入和功能
from flask_cors import CORS, cross_origin
CORS(app)
ReactJS应用程序现在仅使用Axios与Flask应用程序进行通信,并且所有请求都成功,无需允许CORS插件。
问题是:我现在需要知道这是怎么可能的,因为出于不同的原因,我已下令避免使用Python。我想知道问题是如何解决的,以确保当我使用另一种语言重写此部分甚至消除它时,它不会再次出现。在中间使用API是否可以解决CORS问题?
答案 0 :(得分:3)
Cors标头由客户端验证,因此强制执行cors的是客户端。有用于禁用cors的浏览器插件,但是出于安全原因,建议不要这样做。 解决此问题的常用方法是使用反向代理,然后将相关的HTTP Access-Control响应标头添加到响应中。 因此,您可以避免使用反向代理(例如nginx / apache)来使用python。 api与它无关,实际上,在您的情况下,您使用flask作为添加cors标头的反向代理。您可以使用浏览器开发人员工具对此进行调试。
答案 1 :(得分:-1)
我的代码可通过CORS进行分片
导入请求
proxyUrl = 'https://cors-anywhere.herokuapp.com/'
url = 'Endpoint URL you want yo post to'
datas= {'data1': 'daVal1', 'data2': 'daVal2'}
headers = {'x-requested-with':'root_URL_Of_Endpoint', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
x = requests.post(url, data = myobj, headers=headers)
print(x.text)
享受!