离子yii2预检的响应具有无效的HTTP状态代码500

时间:2016-02-18 19:35:24

标签: header ionic-framework yii2 cors

我有一个离子应用程序,我试图做一个POST:

$http({
  url: url+'/usuario/log', 
  method: 'POST',
  data: {usuario : $scope.data.usuario, senha:$scope.data.senha},
  headers : {'content-type':'application/json; charset=UTF-8'}
}).then(function(result) { ... });

在服务器端,我有一个Yii2应用程序:

public function actionLog(){
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: *");
    header("Access-Control-Allow-Headers: content-type");

    $params = json_decode(file_get_contents('php://input'),true);
    $usuario = $params['usuario'];
    $senha = $params['senha'];

    ...
}

但我得到的错误总是如此,我发送一个POST并获得一个OPTIONS

OPTIONS http://www.nexusolucoes.com.br/personal/web/usuario/log
XMLHttpRequest cannot load http://www.nexusolucoes.com.br/personal/web/usuario/log. Response for preflight has invalid HTTP status code 500

1 个答案:

答案 0 :(得分:0)

问题似乎与CORS有关,如果后端与前端不同,则浏览器将始终首先发送OPTIONS请求,以确认前端域允许跨域共享。

如果浏览器获得OPTIONS的正确响应,那么POST请求(您想要的那个)将照常触发。

总而言之,您需要:在URL管理器上添加映射,以响应OPTIONS谓词,以获取您发送POST的完全相同的URL。然后,您需要在控制器中创建操作或使用Yii的yii \ rest \ OptionsAction以及CORS过滤器来允许前端域发出POST请求。

请查看以下链接以获取更多信息: