Skip to main content
 首页 » 编程设计

python之启用 CORS 的 Flask restful api 不适用于远程 ajax 调用

2025年05月04日23sky-heaven

我有一个 Flask 应用程序,其中有一个我试图通过远程服务器调用的 RESTful API。

初始化文件:-

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 

这在同一个本地主机服务器上运行良好,返回正确的结果。在 localhost 上运行的服务器有一个对 api 的 ajax 调用,

$.ajax({ 
                                    async: false, 
                                    type: 'GET', 
                                    url: 'http://localhost:8080/d/'+d_name, 
                  success: function(data) { 
                                        alert(data); 
                                        } 
}); 

当从远程主机调用时不返回任何响应,而是在 Firefox 中我得到 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource d 。这可以通过将资源移动到同一域或启用 CORS 来解决。

我我不确定如何为这个 api 端点配置 CORS。我正在使用 python 2.6 和“flask-cors”。

我发现了这种差异:当我尝试从本地主机访问 api - 2015-03-09 11:40:35 - Flask-Cors:385 - INFO - 来自 Origin:xyz-ld2 的 CORS 请求。 abc.biz:8080, 设置 Access-Control-Allow-Origin:* 当我尝试从远程主机访问 api 时:2015-03-09 11:47:15 - Flask-Cors:385 - INFO - 来自 Origin:None 的 CORS 请求,设置 Access-Control-Allow-Origin: *

请您参考如下方法:

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

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