YII2

时间:2018-01-17 22:14:51

标签: ionic-framework yii2 cors

我在向YII2上的后端发送HTTP请求时遇到问题。我的Ionic代码如下所示:

let headers = new Headers(); 
    headers.append('content-type','application/json');
    headers.append('token', this.sessiontoken);
    let options  = new RequestOptions({ headers: headers}); 
    console.log('HEADERS-----------', options);
    return this.http.get(this.userprofileapi,options) 
                        .map((res:Response) => res.json()) 
                        .catch((error:any)=>Observable.of(error)) 

在YII2中,我打开了我的角色过滤器:

public function behaviors()
{
    $behaviors['corsFilter'] = [
        'class' => \yii\filters\Cors::className(),
        'cors' => [
            // restrict access to
            'Access-Control-Allow-Origin' => ['*'],
            'Origin'                           => ["*"],
            'Access-Control-Request-Method'    => ['POST', 'GET'],
            'Access-Control-Allow-Credentials' => true,
            'Access-Control-Max-Age'           => 3600
        ],
    ];

    return $behaviors ;
}

但在发送错误信息时:

  

对预检请求的响应未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:8100”   访问。

不发送标题。有人在此之前遇到过这个问题吗?以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

this site很好地解释了发生了什么。

将您的ionic.project文件设置为:

{
  "name": "proxy-example",
  "app_id": "",
  "proxies": [
    {
      "path": "/api",
      "proxyUrl": "http://cors.api.com/api"
    }
  ]
}

使用ionic serve运行您的服务器。 如上所述,当您在路径http://localhost:8100/api访问离子服务器时,它会代表您将请求代理到http://cors.api.com/api。 因此,不需要CORS。