У меня есть работающий API, использующий Flask, Flask-SQLAlchemy и Flask-Restless, и я пытаюсь выполнять запросы POST/PUT/DELETE из javascript (точнее, backbone.js). Тем не менее, я продолжаю сталкиваться с ошибками 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
CORS, похоже, дал сбой, когда для заголовка Content-Type запроса было установлено значение application/json (как того требует API), поэтому был сделан быстрый взлом, чтобы все заработало:
@app.before_request
def before():
request.environ['CONTENT_TYPE'] = 'application/json'
Однако все, кроме POST, по-прежнему не работает. Кроме того, ведение журнала gevent включено, но никакие запросы OPTIONS никогда не регистрируются (что, как я полагаю, является предварительной проверкой CORS), даже когда браузер показывает их сбой с ошибкой 501.
Нужно ли что-то менять в gevent или Flask, чтобы CORS работал?
Редактировать: Запуск API с использованием встроенного сервера Flask работает, поэтому здесь проблема с gevent, но я не могу найти много документации...