2016-10-10 1 views
0

Im Aufbau einer App vuejs und Lumen für den api nicht erlaubt,CORS: Content-Type wird von Access-Control-Allow-Header in Preflight Antwort

meine vuejs App einen Fehler wirft, wenn sie versuchen

zu authentifizieren

XMLHttpRequest kann http://api.dev/auth/login nicht geladen werden. Anforderungsheaderfeld Content-Type ist in der Preflight-Antwort von Access-Control-Allow-Header nicht zulässig.

Ich habe einige Middleware cors zu handhaben

class cors { 

    /** 
    * @var array 
    */ 
    protected $settings = [ 
     'maxAge'   => 0, 
     'origin'   => '*', 
     'allowMethods'  => '*', 
     'exposeHeaders'  => '*', 
     'allowedHeaders' => '*' 
    ]; 

public function handle(ServerRequestInterface $request, Closure $next) 
{ 
    //handle preflight request 
    if ('OPTIONS' == $request->getMethod()) { 
     $response = new \Illuminate\Http\Response('',"204"); 
     $this->setOrigin($request, $response); 
     $this->setAllowHeaders($request,$response); 
     return $response; 
    } 
} 

/** 
* @param ServerRequestInterface $request 
* @param ResponseInterface $response 
*/ 
protected function setOrigin(ServerRequestInterface $request,$response) 
{ 
    $origin = $this->settings['origin']; 
    if (is_callable($origin)) { 
     $origin = call_user_func($origin,$response->withAddedHeader('Origin',$origin)); 
    } 
    $response->headers->set('Access-Control-Allow-Origin', $origin); 
} 

/** 
* @param ServerRequestInterface $request 
* @param ResponseInterface $response 
*/ 
protected function setAllowHeaders(ServerRequestInterface $request,$response) 
{ 
    if (isset($this->settings['allowedHeaders'])) { 
     $allowedHeaders = $this->settings['allowedHeaders']; 
     if (is_array($allowedHeaders)) { 
      $allowedHeaders = implode(", ", $allowedHeaders); 
     } 
    } 
    else { 
     $allowedHeaders = $request->hasHeader("Access-Control-Request-Headers"); 
    } 

    if (isset($allowedHeaders)) { 
     $response->headers->set('Access-Control-Allow-Headers', $allowedHeaders); 
    } 
} 
} 

In Chrom meine Antwort-Header

Access-Control-Allow-Headers:* 
Access-Control-Allow-Origin:* 
Cache-Control:no-cache 
Content-Type:text/html; charset=UTF-8 
Date:Mon, 10 Oct 2016 16:10:52 GMT 
Server:Caddy 
Status:204 No Content 
X-Powered-By:PHP/7.0.10 

zeigen Wenn ich eine Wild Card Access-Control-Allow-Header, warum es nicht festgelegt haben den Header akzeptieren?

Antwort

1

Laut der answer to this question sind Wildcards für die Access-Control-Allow-Headers relativ neu (Mai 2016), so dass es wahrscheinlich von den meisten Browsern nicht weit verbreitet ist.

Sie sollten wahrscheinlich genau definieren, welche Header Sie in der Preflight-Anfrage zulassen möchten.

+0

Ich benutze den neuesten Chrome-Browser und schaue mir andere Cors-Implementierungen an, die alle mit Wildcards zu arbeiten scheinen –

+0

Ich glaube, die Fehlermeldung, die du siehst, ist _coming vom Browser_ also ist es eine sichere Wette, dass der Browser es wahrscheinlich nicht unterstützt. Warum nicht den Platzhalter in "Content-Type" ändern und sehen, was passiert? – PatrickSteele

+0

wenn ich meine Einstellungen Array Header erlaubt ändern 'allowedHeaders' => 'Content-Type, Authorization, Herkunft', meine Fehlermeldung kehrt zurück zu XMLHttpRequest nicht laden kann http://api.dev//auth /Anmeldung. Antwort auf Preflight-Anfrage nicht übergeben Zugriffskontrolle überprüfen: Nein "Access-Control-Allow-Origin" Header ist auf der angeforderten Ressource vorhanden Das scheint ein Schritt zurück –

Verwandte Themen