我有一个API正在运行,使用Flask,Flask-SQLAlchemy和Flask-Restless,并试图从javascript(backbone.js,准确地)发出POST/PUT/DELETE请求。但是,我一直运行CORS错误 - 除GET之外的所有内容都会在浏览器中返回HTTP OPTIONS 501 Not Implemented Error。烧瓶和gevent的CORS错误
最初,我尝试添加限制最少的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
CORS似乎当请求的Content-Type首部设置为应用/ JSON(所要求的API)失败,所以一个快速破解得到的东西工作:
@app.before_request
def before():
request.environ['CONTENT_TYPE'] = 'application/json'
但是,除POST之外的所有东西仍然失败。此外,gevent的日志记录功能已打开,但没有记录OPTIONS请求(我相信它是CORS预检内容),即使浏览器显示它们出现故障时也是501.
我是否需要更改gevent中的某些内容或烧瓶让CORS工作?
编辑:使用内置瓶服务器的工作原理,所以GEVENT是这里的问题,但我似乎无法找到文档的方式多...