尽管端点在 apicontroller 内部的行为中使用了 cors 类,但 CORS 标头未添加到响应中
Posted
技术标签:
【中文标题】尽管端点在 apicontroller 内部的行为中使用了 cors 类,但 CORS 标头未添加到响应中【英文标题】:CORS headers not being added to the response despite endpoint using cors class in behaviors inside apicontroller 【发布时间】:2020-05-07 07:46:15 【问题描述】:我遇到了一个问题,即 CORS 标头未添加到响应中。我正在使用包中的“cors”\yii\filters\Cors
基本上,我正在这样做:
class ApiController extends ActiveController
public function behaviors()
return array_merge(parent::behaviors(), [
// For cross-domain AJAX request
'corsFilter' => [
'class' => 'yii\filters\Cors',
'cors' => [
'Origin' => ['*'], // Restrict access to domains
'Access-Control-Max-Age' => 3600, // Cache (seconds)
'Access-Control-Allow-Origin' => true,
'Access-Control-Expose-Headers' => ['*'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Request-Method' => ['POST', 'HEAD', 'DELETE', 'PUT', 'GET', 'OPTIONS'],
],
],
]);
而且我仍然得到与不应用此方法相同的结果。没有 CORS 标头添加到我的端点的OPTIONS
查询的响应中。
还有其他人遇到过这个问题吗?
【问题讨论】:
我试过你的代码,效果很好! 【参考方案1】:您也可以尝试允许来源:
public static function allowedDomains()
return [
// '*', // star allows all domains
'http://localhost:4200',
];
public function behaviors()
return array_merge(parent::behaviors(), [
// For cross-domain AJAX request
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'stats' => ['GET'],
],
],
'corsFilter' => [
'class' => \yii\filters\Cors::className(),
'cors' => [
// restrict access to domains:
'Origin' => static::allowedDomains(),
'Access-Control-Request-Method' => ['POST', 'GET', 'DELETE', 'PUT', 'OPTIONS'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Allow-Headers' => ['*'],
'Access-Control-Allow-Origin' => ['*'],
'Access-Control-Max-Age' => 3600, // Cache (seconds)
],
],
]);
【讨论】:
以上是关于尽管端点在 apicontroller 内部的行为中使用了 cors 类,但 CORS 标头未添加到响应中的主要内容,如果未能解决你的问题,请参考以下文章
为啥尽管 web.ignoring().antMatchers() 仍然在此端点上调用我的过滤器? [复制]