首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶restful启用CORS不适合远程ajax调用。

烧瓶restful启用CORS不适合远程ajax调用。
EN

Stack Overflow用户
提问于 2015-03-07 04:23:25
回答 3查看 5.3K关注 0票数 2

我有一个烧瓶应用程序,其中我有一个restful,我试图通过远程服务器调用它。

init文件:-

代码语言:javascript
复制
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类:-

代码语言:javascript
复制
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调用,

代码语言:javascript
复制
$.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。

EN

回答 3

Stack Overflow用户

发布于 2015-03-07 14:10:26

问题在于资源定义,您只能将regex用于您需要的资源,比如这个或任何其他有效的regex:

代码语言:javascript
复制
cors = CORS(app, resorces={r'/d/*': {"origins": '*'}})
票数 1
EN

Stack Overflow用户

发布于 2015-03-09 21:07:02

好的。问题是我用了

代码语言:javascript
复制
$.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://使用

代码语言:javascript
复制
url:"//xyz. com/d/d_name" i.e. without the protocol.
票数 0
EN

Stack Overflow用户

发布于 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/

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28911342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档