我開發了一個Yii2 REST API應用程序。一切都在當地正常工作。 我已將應用程序部署到遠程服務器。我可以通過郵差獲得API響應。但是當我嘗試使用AJAX或Angular發出請求時,得到「預檢的響應具有無效的HTTP狀態代碼401」錯誤。 我控制器行爲()方法:YII 2遠程服務器上的REST CORS問題
public function behaviors() {
return array_merge(parent::behaviors(), [
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::className(),
'cors' => [
// restrict access to domains:
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET','POST','PUT','DELETE','OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 3600, // Cache (seconds)
],
],
$behaviors['authenticator'] = [
'class' => AvnrHttpBasicAuth::className(),
],
]);
}
響應和請求頭:
我想這是CORS問題,但我想不出爲什麼這不適用於在Centos上運行的遠程服務器阿帕奇。
我已經擴展HttpBasicAuth並用自己的AvnrHttpBasicAuth類
class AvnrHttpBasicAuth extends HttpBasicAuth
{
public function authenticate($user, $request, $response)
{
$authHeader = $request->getHeaders()->get('Authorization');
if ($authHeader !== null && preg_match("/^Basic\\s+(.*?)$/", $authHeader, $matches)) {
$identity = $user->loginByAccessToken($matches[1], get_class($this));
if ($identity === null) {
$this->handleFailure($response);
}
return $identity;
}
return null;
}
}
我加入 '除了'=> [ '選項']異常,但仍然是相同的。 – Chamindar2002
http://XXX.XXX.73.161/~dsltrading/v1/web/api/customer/view?id = 1返回:405「Method Not Allowed。該URL只能處理以下請求方法:GET,HEAD – Chamindar2002
我認爲'AvnrHttpBasicAuth'具有所有Yii2官方過濾器的'except'屬性,但它可能沒有。我不知道什麼庫是。 –