【发布时间】:2016-03-30 16:45:12
【问题描述】:
我正在使用 Yii2 构建一个 API,并启用了 CORS 过滤器来处理来自正在运行的 Web 前端的请求。
但是,由于飞行前的 OPTIONS 请求和真正的 POST 请求,我将两条记录添加到数据库中,每个请求一条。我原以为 Yii 应该接受 OPTIONS 请求,返回正确的标头然后退出。为什么它实际上会处理完整的请求?
我现在正在通过将其添加到控制器操作的顶部来解决这个问题:
if(Yii::$app->request->getMethod() == 'OPTIONS') {
return;
}
这是最好的方法还是我错过了什么?
【问题讨论】:
-
在 CORS 中,您应该使用
'Access-Control-Request-Headers' => ['Expiry']以继续您的算法。 -
您的
urlManager::rules是如何配置的?以及您是如何设置 CORS 过滤器的?默认情况下,yii\rest\UrlRule会将任何 OPTIONS 动词重定向到yii\rest\OptionsAction,该作用仅提供已接受动词的列表。因此,使用默认配置不可能将 OPTIONS 动词视为 POST。也许一个错误的 OPTIONS 答案是让前端重新发送 POST 请求。请显示更多代码并在浏览器的网络选项卡中查看已发送请求的有序列表。 -
这似乎不再是问题了。一旦发送了 CORS 标头,更高版本的 Yii 将退出脚本。