簡體   English   中英

CORS:飛行前響應中Access-Control-Allow-Headers不允許Content-Type

[英]CORS: Content-Type is not allowed by Access-Control-Allow-Headers in preflight response

我使用vuejs和lumen構建API,

我的vuejs應用嘗試進行身份驗證時拋出錯誤

XMLHttpRequest無法加載http://api.dev/auth/login 飛行前響應中的Access-Control-Allow-Headers不允許請求標頭字段Content-Type。

我有一些中間件來處理cors

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);
    }
}
}

在Chrome中,我的響應標題顯示

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

如果我設置了通配符Access-Control-Allow-Headers,為什么它不接受標題?

根據此問題答案Access-Control-Allow-Headers通配符相對較新(2016年5月),因此大多數瀏覽器可能未廣泛采用通配符。

您可能應該准確定義要在預檢請求中允許的標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM