Mam uruchomione API, używając Flask, Flask-SQLAlchemy i Flask-Restless, i próbuję wykonać żądania POST/PUT/DELETE z javascript (a dokładniej backbone.js). Jednak ciągle napotykam na błędy CORS - wszystko oprócz GET zwraca błąd HTTP OPTIONS 501 w przeglądarce.Błędy CORS z Flask i geventem
Początkowo próbowałem dodając najmniej restrykcyjna CORS nagłówki możliwe do wszystkich odpowiedzi:
@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 wydawało się niepowodzeniem, gdy Content-Type nagłówek wniosek został ustawiony na application/json (zgodnie z wymaganiami API) , więc został szybko zrobiony, aby wszystko działało:
@app.before_request
def before():
request.environ['CONTENT_TYPE'] = 'application/json'
Jednak wszystko oprócz POST nadal się nie udaje. Ponadto rejestrowanie gevent jest włączone, ale żadne żądania OPTIONS nie są nigdy rejestrowane (co, jak sądzę, jest materiałem inspekcyjnym CORS), nawet jeśli przeglądarka pokazuje, że zawodzą z 501.
Czy muszę zmienić coś w geventie lub Flask, żeby CORS działał?
Edit: Running API za pomocą wbudowanego serwera prac kolbie tak gevent jest problemem, ale nie wydaje się znaleźć dużo w drodze docs ...