Lumen: Aktivieren CORS

Baute ich eine API mit Lumen und möchten Zugriff mit JavaScript und dem XMLHttpRequest-Objekt. Aber jedes mal, wenn mein PUT -, GET -, POST-und DELETE-Anfragen transformiert werden in OPTIONEN - Anfrage. Ich Las eine Menge von websites, die Informationen von CORS. Ich Baue middleware mit folgendem Inhalt:

class CORSMiddleware
{
    public function handle($request, \Closure $next)
    {
      $response = null;
      /* Preflight handle */
      if ($request->isMethod('OPTIONS')) {
         $response = new Response();
      } else {
         $response = $next($request);
      }

      $response->header('Access-Control-Allow-Methods', 'OPTIONS, HEAD, GET, POST, PUT, DELETE');
      $response->header('Access-Control-Allow-Headers', $request->header('Access-Control-Request-Headers'));
      $response->header('Access-Control-Allow-Origin', '*');
      return $response;
    }
}

My client code:

var url = "http://localhost:8000/api/user";
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open('PUT', url, false);
xmlHttpRequest.send('{"username": "ABC", "password": "ABC","email": "[email protected]" }');
if (xmlHttpRequest.status == 200) {
  console.log(xmlHttpRequest.responseText);
}

Meine Anfrage-Informationen von GET-Anforderung:

Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: null
Connection: keep-alive
Cache-Control: max-age=0

Meine Antwort-Informationen, die von einer GET-Anforderung:

Access-Control-Allow-Methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Sun, 27 Dec 2015 10:36:51 GMT
Host: localhost:8000
x-powered-by: PHP/7.0.0

Meine Anfrage-Informationen von einer PUT-Anfrage:

Host: localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: PUT
Origin: null
Connection: keep-alive
Cache-Control: max-age=0

Meine Antwort von einer PUT-Anfrage:

Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Sun, 27 Dec 2015 10:36:51 GMT
Host: localhost:8000
x-powered-by: PHP/7.0.0

In der preflight-es gibt keine "Access-Control-Allow-*"-Header. Ich weiß nicht, warum; ich konnte es mit meinem lumen-cors-middleware.

  • Es klingt wie Ihre Anforderung ist die Auslösung der browser zu senden Sie zuerst a CORS preflight. Es gibt keine Möglichkeit zu umgehen, dass; es ist erforderlich, das Verhalten im Browser mit Hinblick auf cross-origin-requests. So wie es scheint, müssen Sie möglicherweise zu Lesen, auf die CORS-docs und aktualisieren Sie Ihren code entsprechend.
  • Auf PUT AJAX-Anfragen und in vielen anderen Fällen-Browser erzeugen, Preflight requests, die Sie versucht haben, zu behandeln. Was ist deine genaue Frage?
  • Keine POST -, PUT-oder DELETE-Anforderung funktioniert - keine Antwort, das ist mein Problem 🙂 GET-Anforderungen arbeiten
  • Ich schon fangen die preflight mit den angegebenen php-code..aber Sie funktionieren nicht, warum?
InformationsquelleAutor Nis | 2015-12-27
Schreibe einen Kommentar