Ich entwickle eine angularjs App, die Laravel als Back-End-Server verwendet. Ich habe Probleme jede Anforderung erhalten, da, bevor Daten von Laravel Zugriff Winkel ersten sendet eine OPTION Anfrage wie untenLaravel Umgang mit der OPTION http Methode Anfrage
OPTIONS /61028/index.php/api/categories HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Request-Method: GET
Origin: http://localhost:3501
Access-Control-Request-Headers: origin, x-requested-with, accept
Accept: */*
Referer: http://localhost:3501/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: UTF-8,*;q=0.5
I haben versucht, diese durch, bevor der Filter in der Zugabe von den folgenden Code zu antworten
if (Request::getMethod() == "OPTIONS") {
$headers = array(
'Access-Control-Allow-Origin' =>' *',
'Access-Control-Allow-Methods'=>' POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers'=>'X-Requested-With, content-type',);
return Response::make('', 200, $headers);
}
Dies erzeugt eine Antwort mit den Headern
Content-Encoding: gzip
X-Powered-By: PHP/5.3.5-1ubuntu7.11
Connection: Keep-Alive
Content-Length: 20
Keep-Alive: timeout=15, max=97
Server: Apache/2.2.17 (Ubuntu)
Vary: Accept-Encoding
access-control-allow-methods: POST, GET, OPTIONS, PUT, DELETE
Content-Type: text/html; charset=UTF-8
access-control-allow-origin: *
cache-control: no-cache
access-control-allow-headers: X-Requested-With, content-type
Obwohl die Header gesetzt sind, führt der Browser immer noch einen Fehler
XMLHttpRequest cannot load http://localhost/61028/index.php/api/categories. Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.
ich auch der Ursprung auf den Ursprung im Request-Header präsentiert erlauben versucht haben, Einstellung wie unten
$origin=Request::header('origin');
//then within the headers
'Access-Control-Allow-Origin' =>' '.$origin[0],
und immer noch die gleichen Fehler Was mache ich falsch? Jede Hilfe wird sehr geschätzt.
Edit 1
ich zur Zeit eine sehr hässliche Hack bin mit dem ich über-ride Initialisierung laravels, wenn eine Anfrage OPTIONEN empfangen wird. Dies habe ich in der index.php gemacht.
Ich musste auch die Zulassen-Herkunft-Header zum Vor-Filter hinzufügen.
Ich weiß, das ist nicht klug, aber es ist meine einzige Lösung für die jetzt
Ich bin mir ziemlich sicher, dass in der index.php hinzufügen, wenn ich das versucht, fand ich, dass einige Browser das Gehäuse korrekt zu sein, erfordern aus. Sieht so aus, als würde Laravel alles unterlegen, was technisch in Ordnung ist, aber immer noch fehlschlagen kann. – Evert
@Evert ich bemerkte das und dachte über die eingebaute php 'header()' Funktion nach. Das Problem ist jedoch immer noch hartnäckig. – klvmungai
Das ist dann seltsam. Stellen Sie außerdem sicher, dass Sie alle diese Header für die Anforderungen GET, PUT, DELETE und POST zurücksenden? Es ist erforderlich .. – Evert