這應該是錯誤的,因爲瀏覽器需要options
響應來知道允許發送的動詞列表。否則可能會引發401錯誤。它的源代碼可以看出here:
class OptionsAction extends \yii\base\Action
{
public $collectionOptions = ['GET', 'POST', 'HEAD', 'OPTIONS'];
public $resourceOptions = ['GET', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
public function run($id = null)
{
if (Yii::$app->getRequest()->getMethod() !== 'OPTIONS') {
Yii::$app->getResponse()->setStatusCode(405);
}
$options = $id === null ? $this->collectionOptions : $this->resourceOptions;
Yii::$app->getResponse()->getHeaders()->set('Allow', implode(', ', $options));
}
}
,這是所有它做什麼:一個響應頭內允許發送的動詞列表。
也許由於意外的響應,POST請求已從客戶端腳本發送兩次。嘗試應用我在其他問題中發佈的答案。我認爲它也將解決這個問題:
Yii2 CORS with Auth not working for non CRUD actions。
在CORS中,您應該使用''Access-Control-Request-Headers'=> ['Expiry']'來繼續您的算法。 –
你的'urlManager :: rules'配置如何?你是如何設置CORS過濾器的?默認情況下'yii \ rest \ UrlRule'會將任何OPTIONS動詞重定向到'yii \ rest \ OptionsAction'這個角色只會傳遞一個被接受的動詞列表。因此,對於默認配置,OPTIONS謂詞不可能被視爲POST。也許一個錯誤的選項答案是讓前端重新發送POST請求。請顯示更多代碼,並在瀏覽器的網絡選項卡中檢查已發送請求的已排序列表。 –
這似乎不再是一個問題。 Yii的更高版本將在CORS標頭髮送後退出腳本。 – Dubby