Я работаю над RESTful API веб-службы на платформе Bottle Web Framework и хочу получить доступ к ресурсам с помощью вызовов jQuery AJAX.
Используя клиента REST, интерфейсы ресурсов работают по назначению и корректно обрабатывают запросы GET, POST,.... Но при отправке запроса POQ JQuery AJAX, в результате запроса предварительной предварочной процедуры OPTIONS просто отказано как "405: метод не разрешен".
Я попытался включить CORS на сервере Bottle - как описано здесь: http://bottlepy.org/docs/dev/recipes.html#using-the-hooks-plugin Но after_request hook никогда не вызывается для запроса OPTIONS.
Вот отрывок моего сервера:
from bottle import Bottle, run, request, response
import simplejson as json
app = Bottle()
@app.hook('after_request')
def enable_cors():
print "after_request hook"
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS'
response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'
@app.post('/cors')
def lvambience():
response.headers['Content-Type'] = 'application/json'
return "[1]"
[...]
Вызов jQuery AJAX:
$.ajax({
type: "POST",
url: "http://192.168.169.9:8080/cors",
data: JSON.stringify( data ),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
alert(data);
},
failure: function(err) {
alert(err);
}
});
Сервер регистрирует только ошибку 405:
192.168.169.3 - - [23/Jun/2013 17:10:53] "OPTIONS /cors HTTP/1.1" 405 741
$. post работает, но неспособность отправлять запросы PUT приведет к поражению цели службы RESTful. Итак, как я могу разрешить обработку запроса предварительной проверки OPTIONS?