小编Joh*_*die的帖子

Flask和gevent的CORS错误

我有一个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
Run Code Online (Sandbox Code Playgroud)

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

@app.before_request
def before():
    request.environ['CONTENT_TYPE'] = 'application/json'
Run Code Online (Sandbox Code Playgroud)

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

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

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

javascript python gevent cors flask

6
推荐指数
1
解决办法
3825
查看次数

标签 统计

cors ×1

flask ×1

gevent ×1

javascript ×1

python ×1