跨源请求被阻止:

时间:2014-08-20 09:28:56

标签: php cordova yii cors

我有一个移动应用,它使用API​​通过登录表单对用户进行身份验证。

今天一直运行良好..现在,当我尝试登录时,我在控制台日志中收到以下消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myapp.local/myAppApi/V1/appLogin. 
This can be fixed by moving the resource to the same domain or enabling CORS.

显然我需要启用CORS来读取消息,在myApiController.php中我在Yii应用程序中有以下代码,我相信应该这样做:

protected function _renderJSON($status = 200)
{
    $statusCodeMessage = $this->_getStatusCodeMessage($status);
    header("HTTP/1.1 {$status} {$statusCodeMessage}");

    // allow for Cross Origin Resource Sharing
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
    header("Access-Control-Allow-Headers: Authorization");
    header('Content-type: application/json');
    echo CJSON::encode($this->jsonArray);

    foreach (Yii::app()->log->routes as $route) {
        if ($route instanceof CWebLogRoute) {
            $route->enabled = false; // disable any weblogroutes
        }
    }
    Yii::app()->end();
}

有人可以帮我解决这个问题吗?该应用程序使用cordova框架和它连接的API通过使用Yii构建的PHP应用程序工作。

任何建议都将不胜感激

- 更新 - 我已将以下内容添加到我的htaccess中,但没有任何快乐

<ifModule mod_headers.c>
 Header set Access-Control-Allow-Origin: *
 Header set Access-Control-Allow-Headers: Authorization
 Header set Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
</ifModule>

- 更新 - 我发现此链接看起来很有用 https://gist.github.com/sourcec0de/4237402

2 个答案:

答案 0 :(得分:9)

尝试在API控制器构造函数中添加以下代码,它适用于我。

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

答案 1 :(得分:1)

ERROR : Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at the url. This can be fixed by moving the resource to the same domain or enabling CORS.

解决方案:

我找到了解决方案cross-origin request bolcked "solved"

如果您正在处理Web项目并希望从不同的站点获取数据, 有时你会遇到这种类型的错误 那么你必须在根文件夹中使用 htaccess 文件

更新代码

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>  

如果您是wordpress开发人员,请更新以下代码:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

# END WordPress 

谢谢:)快乐编码: