Flask和gevent的CORS错误

时间:2012-12-01 00:56:38

标签: javascript python flask cors gevent

我运行了一个API,使用Flask,Flask-SQLAlchemy和Flask-Restless,我正在尝试从javascript(backbone.js,确切地说)发出POST / PUT / DELETE请求。但是,我一直遇到CORS错误 - 除了GET之外的所有内容都会在浏览器中返回HTTP OPTIONS 501 Not Implemented Error。

最初,我尝试为所有响应添加限制最少的CORS标头:

@app.after_request
def after(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add('Access-Control-Allow-Methods',
                         'POST, GET, PUT, PATCH, DELETE, OPTIONS')
    response.headers.add('Access-Control-Allow-Headers',
                         'Content-Type, X-Requested-With')
    response.headers.add('Access-Control-Max-Age', '1728000')

    return response

当请求的Content-Type标头设置为application / json(根据API的要求)时,CORS似乎失败了,所以快速破解了以便让事情正常工作:

@app.before_request
def before():
    request.environ['CONTENT_TYPE'] = 'application/json'

然而,除POST之外的所有内容仍然失败。此外,gevent的日志记录已打开,但是没有记录任何OPTIONS请求(我相信这是CORS预检的内容),即使浏览器显示它们失败了501。

我是否需要在gevent或Flask中更改内容以使CORS正常工作?

编辑:使用内置的Flask服务器运行API是有效的,所以gevent是问题所在,但我似乎找不到很多文档...

2 个答案:

答案 0 :(得分:7)

有一个烧瓶片段Decorator for the HTTP Access Control,您可以使用@crossdomain(origin ='*')装饰器。

答案 1 :(得分:0)

最简单的方法是使用 flask-cors 插件

使用pip安装

  

pip install -U flask-cors

示例代码

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

@app.route("/api/v1/users")
def list_users():
  return "user example"

对于文档,请访问flask-cors documentation