Bottle Py: Aktivieren von CORS für jQuery AJAX-Anforderungen

Ich arbeite an einer RESTful-API eines Webdienstes im Bottle Web Framework und möchte mit jQuery AJAX-Aufrufen auf die Ressourcen zugreifen.

Bei Verwendung eines REST-Clients funktionieren die Ressourcenschnittstellen wie vorgesehen und verarbeiten GET-, POST- usw. Anforderungen ordnungsgemäß. Beim Senden einer jQuery AJAX POST-Anforderung wird die resultierende OPTIONS-Preflight-Anforderung einfach als "405: Methode nicht zulässig" abgelehnt.

Ich habe versucht, CORS auf dem Flaschenserver zu aktivieren - wie hier beschrieben:http://bottlepy.org/docs/dev/recipes.html#using-the-hooks-plugin Aber dieafter_request hook wird nie für die OPTIONS-Anforderung aufgerufen.

Hier ist ein Auszug meines Servers:

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]"

[...]

Der Aufruf von 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);
    }
});

Der Server protokolliert nur einen 405-Fehler:

192.168.169.3 - - [23/Jun/2013 17:10:53] "OPTIONS /cors HTTP/1.1" 405 741

$ .post funktioniert, aber PUT-Anforderungen können nicht gesendet werden, was den Zweck eines RESTful-Service beeinträchtigt. Wie kann ich also zulassen, dass die OPTIONS-Preflight-Anforderung verarbeitet wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage