2016-07-29 3 views
0

Ich schrieb eine REST-Dienste mit Symfony FOSRestBundle. Es funktioniert gut mit GET-Anfrage.FOSRest OPTIONS Anfrage zurück 405 Methode nicht erlaubt

Jetzt versuche ich mit Ember «Modelle» zugreifen und bekomme eine Fehlermeldung.Tatsächlich versuchen Ember mit OPTIONS-Anfrage (Preflight) zuzugreifen und es fehlgeschlagen mit «Request-Header-Feld Access-Control-Allow-Origin nicht erlaubt. von Access-Control-Allow-Header in Preflight-Reaktion »wird ich habe versucht, den REST-Service mit Postman zuzugreifen und ich habe diesen Fehler: mit OPTIONS http://myUrl.local/groups:„405 Methode nicht erlaubt »

aber es funktioniert gut, wenn ich anrufe OPTIONEN http://myUrl.local/

Ich benutze Apache unter El Capitan (IMac). Ich habe versucht, diese Zeilen an /private/etc/apache2/extra/httpd-default.conf anzuhängen: Header hinzufügen Access-Control-Allow-Origin "*" Header hinzufügen Access-Control-Allow-Header "Herkunft, Inhalt -type " Header hinzufügen Access-Control-Allow-Methoden" PUT, GET, POST, LÖSCHEN, OPTIONEN "

Ich habe versucht, diese Zeilen in Direktive in meinem VirtualHost anzuhängen. Gleiche Ergebnisse in beiden Fällen.

Ist das Problem in Symfony oder FOSrestBundle.

Ich brauche Hilfe, um zu verstehen, was passiert. Wie kann ich mein Problem lösen?

Antwort

0

Ich nehme an, dass Ihre Ember-Anwendung nicht auf derselben Domain wie Ihre Symfony-Anwendung gehostet wird - es könnte sich um eine App auf Ihrem Telefon handeln? Dadurch richten sich Ihre Anfragen nach dem CORS-Protokoll (Cross-Origin Resource Sharing).

Sie haben die zu definierenden Header korrekt identifiziert. Der Grund, warum es nicht funktioniert ist, dass /groups wahrscheinlich Routen zu einer Aktion ähnlich wie diese:

<?php 

namespace AppBundle\Controller; 

class GroupsController 
{ 
    public function getGroupsAction() 
    {} // "get_users"   [GET] /users 
} 

Da diese Aktion erfordert das Verfahren GET, FOSRestBundle blockiert Anforderungen von jeder anderen Methode und den Statuscode zurückgibt 405 Sie sind bekommen. Deshalb hat auch eine OPTIONS-Anfrage an / funktioniert - es ist nicht Ihr Server blockiert es, es ist FOSRestBundle.

Verwenden Sie die NelmioCorsBundle, um Preflights korrekt zu behandeln. Das Bündel

  • Griffe CORS Preflight OPTIONS fordert
  • Fügt CORS-Header auf Ihre Antworten

Siehe issue #587 Referenz.

Verwandte Themen