angular-seed POST对每个浏览器的行为都不同

时间:2015-09-04 17:31:12

标签: javascript angularjs authentication browser cross-browser

我不确定我的http post方法发生了什么。从我正在阅读的内容来看,我的安全性可能有问题,但我不确定是这种情况还是如何解决它。任何正确方向的见解都会很好。

我正在尝试发布API并检索回复并返回数据。当我在IE中运行POST时,我得到了正确的响应。

然而,当我在Chrome中尝试此操作时,我得到了奇怪的结果。我的POST变成了OPTIONS方法。状态代码为200 OK,但我的响应为空。当我尝试在没有POST的情况下直接访问网址时,我会在浏览器中显示:

  

{“result”:false,“error”:“身份验证失败:会话身份验证失败:未指定主机名身份验证状态:无效登录”}

这是test.js(控制器)

var host = '255.255.255.255';
var creds = {'logintype':'1','host':host,'user':'Administrator','password':'1234','controlid':'ABC999'};
//var obj = JSON.stringify(creds);


angular.module('myApp.test', ['ngRoute'])
    .config(['$routeProvider', function($routeProvider) {
      $routeProvider.when('/test', {
      templateUrl: 'test/test.html',
      controller: 'TestCtrl',
      resolve: {
          friends: ['$http', function($http) {
          return $http({url: 'http://192.168.2.164/ISAPI/rip.dll/REST/SESSIONS/',method: 'POST', data: creds })
              .success(function (data) {
                  return data;
              })
              .error(function () {
                  return 'Error';
              });
      }]
  }
});
}])
.controller('TestCtrl', ['$scope', 'friends',function($scope,response) {
    $scope.response = response;
}]);

1 个答案:

答案 0 :(得分:0)

感谢anananderson,我能够解决我的问题。我之所以发生这种情况,是因为Chrome会针对跨域请求执行称为“预检”的操作。我需要将API移动到与运行站点相同的服务器上,以避免跨站点脚本。