Python 支持CORS的Flask restful api不适用于远程ajax调用
我有一个flask应用程序,其中有一个restful api,我正试图通过远程服务器调用它 init文件:-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
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.