Rails reagiert mit 404 auf CORS Preflight Options Request

Bin ich erstellen eine Reihe von Diensten mit Schienen 4, die ich aufwändig mit einem JavaScript-browser-Anwendung. Cross-origin WIRD funktionieren, aber meine Beiträge sind nicht die preflight-OPTIONEN überprüfen, mit einem 404-Fehler. Mindestens, ich denke, das ist, was passiert. Hier sind die Fehler, wie Sie in der Konsole angezeigt. Dies ist Chrome 31.0.1650.63 auf einem Mac.

OPTIONS http://localhost:3000/confessor_requests 404 (Not Found) jquery-1.10.2.js:8706
OPTIONS http://localhost:3000/confessor_requests No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. jquery-1.10.2.js:8706
XMLHttpRequest cannot load http://localhost:3000/confessor_requests. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. main.html:1

Ich habe gesucht hoch und niedrig für Anweisungen zum aktivieren CORS, und ich bin ratlos. Die übliche Empfehlung scheint zu sein, etwas zu setzen, wie dies in der Anwendung-controller, was ich auch Tat.

before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers

def cors_set_access_control_headers
  headers['Access-Control-Allow-Origin'] = '*'
  headers['Access-Control-Allow-Methods'] = 'POST, PUT, GET, OPTIONS'
  headers['Access-Control-Allow-Headers'] = '*'
  headers['Access-Control-Max-Age'] = "1728000"
end

def cors_preflight_check
  if request.method == :options
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, GET, OPTIONS'
    headers['Access-Control-Allow-Headers'] = '*'
    headers['Access-Control-Max-Age'] = '1728000'
    render :text => '', :content_type => 'text/plain'
  end
end

Gefolgt von einige Art der route in der Routen.rb, leitet diese Aktion, wenn Sie eine OPTIONS-Anfrage kommt.

match "/*all" => "application#cors_preflight_check", :constraints => { :method => "OPTIONS" }

Den 'match' - Direktive funktioniert nicht mehr in den Schienen 4, also habe ich daran rumgebastelt, versucht, dass es BEITRÄGE direkt, wie diese:

post "/*all" => "application#cors_preflight_check", :constraints => { :method => :options }

Aber es funktioniert immer noch nicht. Da die GET-requests zu arbeiten, gehe ich davon aus, dass das, was ich bin fehlt, ist die richtige route für die OPTIONS-Anfrage. Aber, ich habe versucht, jeden Weg, den ich denken kann, und nichts scheint zu lassen, die Anfrage durch.

Ich habe auch versucht, die Installation von cyu/rack-cors, und das gibt das gleiche Ergebnis.

Weiss jemand was ich falsch mache?

Kommentar zu dem Problem
match sollte immer noch funktionieren, aber es beschwert sich, wenn Sie sich nicht über eine über option. Sie tun es mit post ist definitiv nicht zur Arbeit gehen. Als jemand, der genau diesen Fehler, bevor Sie mit rack-cors, auch werde ich Fragen: hast du den server neu starten, nachdem Sie den - rack-cors - middleware? Ich verbrachte eine Stunde+ jagen, eine Weile wieder selbst. 🙂 Kommentarautor: Matt Jones
Hier gilt das gleiche. Ich habe versucht, sowohl die benutzerdefinierten Methoden und der Edelstein: alles funktioniert gut, bis ein ActiveRecord::RecordNotFound - Ausnahme ausgelöst. In diesem Fall CORS funktioniert nicht. Kommentarautor: collimarco
Habe ich weiter untersucht die Frage: in meinem Fall die preflight-response-Header korrekt sind, während der aktuellen Anfrage (wenn eine Ausnahme ausgelöst wird) erzeugt eine Antwort, ohne die CORS-Header Kommentarautor: collimarco

InformationsquelleAutor der Frage Rolandus | 2013-12-28

Schreibe einen Kommentar