Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用中间层作为API可以绕过CORS吗?_Python_Reactjs_Flask_Cors_Httprequest - Fatal编程技术网

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

Python 使用中间层作为API可以绕过CORS吗?,python,reactjs,flask,cors,httprequest,Python,Reactjs,Flask,Cors,Httprequest,我正在使用ReactJS开发一个应用程序,它使用Hyperion提供的RESTAPI与另一个企业应用程序(Oracle Hyperion)通信。问题是这个API没有得到官方支持,也不支持CORS。我试图找到解决这个问题的办法,但没有成功 在试图解决另一个问题时,我创建了一个Python Flask应用程序,并使ReactJS应用程序和Hyperion Rest API之间的所有通信都通过它。不知何故,这使得正在发生的CORS错误消失了。我在Flask应用程序中使用了以下导入和函数 from fl

我正在使用ReactJS开发一个应用程序,它使用Hyperion提供的RESTAPI与另一个企业应用程序(Oracle Hyperion)通信。问题是这个API没有得到官方支持,也不支持CORS。我试图找到解决这个问题的办法,但没有成功

在试图解决另一个问题时,我创建了一个Python Flask应用程序,并使ReactJS应用程序和Hyperion Rest API之间的所有通信都通过它。不知何故,这使得正在发生的CORS错误消失了。我在Flask应用程序中使用了以下导入和函数

from flask_cors import CORS, cross_origin

CORS(app)
ReactJS应用程序现在只使用Axios与Flask应用程序通信,所有请求都成功,而不需要allow CORS插件


问题是:我现在需要知道这是如何实现的,因为我有一个避免使用Python的命令,原因不同。我想知道这个问题是如何解决的,以确保当我用另一种语言重写这个部分或甚至消除它时,它不会再次出现。使用中间的API是否解决CORS问题或是什么?服务器发送的

< P> CORS头被客户端验证,因此是执行CORS的客户端。有一些浏览器插件可以禁用cors,但出于安全原因,这是不可取的。 通常的处理方法是使用反向代理并将相关的HTTP访问控制响应头添加到响应中。 因此,可以通过使用反向代理(例如nginx/apache)来避免使用python。
api与此无关,实际上在您的案例中,您使用flask作为添加cors头的反向代理。您可以使用浏览器开发工具对此进行调试。

服务器发送的Cors头由客户端验证,因此强制Cors的是客户端。有一些浏览器插件可以禁用cors,但出于安全原因,这是不可取的。 通常的处理方法是使用反向代理并将相关的HTTP访问控制响应头添加到响应中。 因此,可以通过使用反向代理(例如nginx/apache)来避免使用python。
api与此无关,实际上在您的案例中,您使用flask作为添加cors头的反向代理。您可以使用浏览器开发人员工具对此进行调试。

我的代码可以通过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)

享受吧

我的代码在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)

享受吧

用Flask作为反向代理,你的意思是这样的吗?response.getHeaders();(Java代码)说客户端正在强制执行,你是说浏览器吗?我不建议使用flask作为反向代理,如果它仅用于cors,最好使用一个设计用于此目的的应用程序(apache/nginx),但在这种情况下,你似乎正在使用flask作为反向代理。我所说的客户端是指浏览器是的。此外,使用“*”会使您暴露出潜在的安全问题,您应该使用referer url主机。您是否有任何指南或资源,说明如何使用apache作为反向代理将头添加到响应中?非常感谢您的帮助。这有点超出了这个问题的范围,但您可以尝试此站点的cors配置:,例如。此处描述了反向代理配置:。首先检查您是否可以直接访问api,然后添加适当的访问控制允许源标题。您确定在我的情况下使用apache作为反向代理有效吗?我从您添加的链接中了解到,它是在向apache发出的响应添加头,而不是像我需要的那样向传入的响应添加头?response.getHeaders();(Java代码)说客户端正在强制执行,你是说浏览器吗?我不建议使用flask作为反向代理,如果它仅用于cors,最好使用一个设计用于此目的的应用程序(apache/nginx),但在这种情况下,你似乎正在使用flask作为反向代理。我所说的客户端是指浏览器是的。此外,使用“*”会使您暴露出潜在的安全问题,您应该使用referer url主机。您是否有任何指南或资源,说明如何使用apache作为反向代理将头添加到响应中?非常感谢您的帮助。这有点超出了这个问题的范围,但您可以尝试此站点的cors配置:,例如。此处描述了反向代理配置:。首先检查您是否可以直接访问api,然后添加适当的访问控制允许源标题。您确定在我的情况下使用apache作为反向代理有效吗?我从您添加的链接中了解到,它是在向apache发出的响应添加头,而不是像我需要的那样向传入的响应添加头。