我有一个烧瓶应用程序,其中我有一个restful,我试图通过远程服务器调用它。
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>')现在是d_Api类:-
from flask import Flask, render_template, g
from flask.ext.restful import reqparse, abort, Api, Resource
def abort_if_not_exist(d_name):
return d_name
class d_Api(Resource):
def __init__(self):
self.d=d
def get(self, d_name):
val=abort_if_not_exist(d_name)
return val这在相同的本地主机服务器上运行良好,返回正确的结果。运行在本地主机上的服务器对api有一个ajax调用,
$.ajax({
async: false,
type: 'GET',
url: 'http://localhost:8080/d/'+d_name,
success: function(data) {
alert(data);
}
});当从远程主机调用时不会返回任何响应,相反,在Firefox中,我会阻止跨源请求:相同的原产地策略不允许读取远程资源d。可以通过将资源移动到相同的域或启用CORS来解决这个问题。
我m not sure how else to configure CORS for this api endpoint. I正在使用python2.6和“烧瓶-cors”。
我发现了这个区别:当我尝试从本地主机( 2015-03-09 11:40:35 - Flask-Cors:385 - INFO - CORS request from Origin:xyz-ld2.abc.biz:8080, setting Access-Control-Allow-Origin:* )点击api时,我尝试从远程主机( 2015-03-09 11:47:15 - Flask-Cors:385 - INFO - CORS request from Origin:None, setting Access-Control-Allow-Origin:* )点击api。
发布于 2015-03-07 14:10:26
问题在于资源定义,您只能将regex用于您需要的资源,比如这个或任何其他有效的regex:
cors = CORS(app, resorces={r'/d/*': {"origins": '*'}})发布于 2015-03-09 21:07:02
好的。问题是我用了
$.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.发布于 2016-07-29 08:23:40
问题在于代码中的这个语句:
cors = CORS(app, resorces={r'/d/<string:d_name>': {"origins": '*'}})
来自文档:origin
flask_cors.cross_origin(*args, **kwargs) The origin, or list of origins to allow requests from. The origin(s) may be regular expressions, case-sensitive strings, or else an asterisk
在这里,您需要提供一个RegEx;例如:
cors = CORS(app, resorces={r'/d/*': {"origins": '*'}})
这将在从CORS开始的所有路由上启用/d/。
希望这能有所帮助!
https://stackoverflow.com/questions/28911342
复制相似问题