0
林建設使用的API vuejs和內腔中的應用程序允許,CORS:內容類型不被訪問控制允許報頭中的預檢響應
嘗試驗證
當我vuejs程序是拋出一個錯誤XMLHttpRequest無法加載http://api.dev/auth/login。請求標題字段Content-Type在預檢響應中不被Access-Control-Allow-Headers所允許。
我有一些中間件處理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
如果我給自己定一個外卡接入控制允許頭爲何不能接受頭文件?
即時通訊使用最新的chrome瀏覽器並查看其他cors實現它們似乎都使用通配符 –
我相信您看到的錯誤消息是來自browser_,因此瀏覽器可能不支持它。爲什麼不將通配符更改爲'Content-Type'並查看會發生什麼? – PatrickSteele
如果我改變設置陣列允許報頭以 「allowedHeaders」 =>「內容 - 類型,授權,起源」, 我的錯誤消息變爲回 的XMLHttpRequest不能加載http://api.dev//auth /登錄。對預檢請求的響應未通過訪問控制檢查:請求的資源上沒有「訪問控制 - 允許原始」標頭 這似乎是退步 –