私は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上で実行されているリモートサーバ上で動作していないのですか? apache。
私はHttpBasicAuthを拡張し、あなたがofficial docsに示すように、プリフライトリクエストの例外を追加する必要があり、私自身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;
}
}
'except' => ['options']例外を追加しましたが、それでも同じです。 – Chamindar2002
http://XXX.XXX.73.161/~dsltrading/v1/web/api/customer/view?id = 1 returns:405 "Method not Allowed。このURLは、次のリクエストメソッドしか処理できません:GET、HEAD – Chamindar2002
私は 'AvnrHttpBasicAuth'にはYii2の公式フィルタのすべての' except'プロパティがあると仮定しましたが、それはないかもしれません。どのライブラリがそれなのか分かりません。 –