Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 支持CORS的Flask restful api不适用于远程ajax调用_Python_Ajax_Flask_Cors_Flask Restful - Fatal编程技术网

Python 支持CORS的Flask restful api不适用于远程ajax调用

Python 支持CORS的Flask restful api不适用于远程ajax调用,python,ajax,flask,cors,flask-restful,Python,Ajax,Flask,Cors,Flask Restful,我有一个flask应用程序,其中有一个restful api,我正试图通过远程服务器调用它 init文件:- from flask.ext import restful from flask.ext.cors import CORS app = create_app(__name__) app.config['CORS_HEADERS'] = 'Content-Type' cors = CORS(app, resorces={r'/d/<string:d_name>': {"ori

我有一个flask应用程序,其中有一个restful api,我正试图通过远程服务器调用它

init文件:-

from flask.ext import restful
from flask.ext.cors import CORS

app = create_app(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resorces={r'/d/<string:d_name>': {"origins": '*'}})
api=restful.Api(app)
api.add_resource(g_Api, '/g/<string:g_id>')
api.add_resource(d_Api, '/d/<string:d_name>')
这在同一本地主机服务器上运行正常,并返回正确的结果。在localhost上运行的服务器具有对api的ajax调用

$.ajax({
                                    async: false,
                                    type: 'GET',
                                    url: 'http://localhost:8080/d/'+d_name,
                  success: function(data) {
                                        alert(data);
                                        }
});
当从remotehost调用时,不会返回任何响应,相反,在Firefox中,我会阻止跨源请求:同源策略不允许读取远程资源数据。这可以通过将资源移动到同一域或启用CORS来解决

我不知道如何为这个api端点配置CORS。我使用python 2.6和“flask cors”

我发现了这个区别:当我尝试从本地主机点击api时-
2015-03-09 11:40:35-Flask Cors:385-INFO-Cors-request from-Origin:xyz-ld2.abc.biz:8080,设置访问控制允许Origin:

当我尝试从远程主机点击api时:
2015-03-09 11:47:15-Flask Cors:385-INFO-Cors request from Origin:None,设置访问控制允许Origin:

问题在于资源定义,您只能对资源使用regex 您需要这样的内容或任何其他有效的正则表达式:

cors = CORS(app, resorces={r'/d/*': {"origins": '*'}})

嗯。问题是我用的是

$.ajax({
                                    async: false,
                                    type: 'GET',
                                    url: 'http://localhost:8080/d/'+d_name,
                  success: function(data) {
                                        alert(data);
                                        }
});
Url作为本地主机,这不是正确的方法。您应该始终使用承载内容的IP或VIP或域地址。 例如:
url:'http://xyz.com:8080/d'+d_name'
将起作用。供https://使用

url:"//xyz. com/d/d_name" i.e. without the protocol.

代码中的此语句存在问题:

cors=cors(app,resorces={r'/d/':{“origins”:'*'})

从文件中:

flask_cors.cross_origin(*args,**kwargs)
允许来自的请求的源或源列表。原点可以是正则表达式、区分大小写的字符串或星号

这里您需要提供一个
RegEx
;比如:

cors=cors(app,resorces={r'/d/*':{“origins”:'*'})

这将在以
/d/
开头的所有路线上启用
CORS


希望这有帮助

现在有什么问题吗?看,我更新了问题。。我没有收到响应,但当我尝试使用jquery post远程访问api时,也会出现同样的错误,但从浏览器上看,即使是远程访问,也可以正常工作。你没有拼写错误:“resorces”。至少3.0.2拼写为“资源”:
url:"//xyz. com/d/d_name" i.e. without the protocol.