虚假https请求无法使服务器

时间:2016-03-05 19:05:53

标签: angularjs http post

当我运行AngularJS登录我的后端时,我遇到了内部问题。我可以通过异常处理解决这个问题,但真正的问题仍然存在。我正在尝试使用基本身份验证方法,因此我在客户端代码中调用它:

function Login(username, password) {

        var authdata = CreateLoginHeader(username, password);
        var config = {
                withCredentials: true,
                headers:  { 'Authorization': authdata, 'Content-Type', 'application/json' }
        };
        $http.post('http://brain-ratmap.rhcloud.com/api/v1/brain/study/login', config).then(SuccessLogin, ErrorLogin);
    }

function CreateLoginHeader(username, password) {
        var authdata = btoa(username + ':' + password);
        return 'Basic uIg' + authdata;
    }

当我解雇时,我在JS中遇到了这个错误:

XMLHttpRequest无法加载http://XXXX/api/v1/login。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://YYYY'因此不允许访问。响应的HTTP状态代码为500。

就像我说的,我知道如果我会处理我的异常并仍然会返回一个响应,那么这个POST方法应该可行。但我要问的是,为什么我的基本身份验证不起作用 - 当我在服务器端收到请求时,标题中的Authenticate值不包含任何其他内容" Basic&#34 ;.

这也是我对所有标题值的记录输出[Key;值的大小; 1个索引的值]:

2016-03-05 13:52:50,610 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:接受 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)应用程序/ json,text / plain, / 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Accept-Encoding 2016-03-05 13:52:50,612 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,613 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)gzip,deflate 2016-03-05 13:52:50,615 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Accept-Language 2016-03-05 13:52:50,615 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,616 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)en-US,en; q = 0.8

2016-03-05 13:52:50,616 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:授权

2016-03-05 13:52:50,617 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题值为1

2016-03-05 13:52:50,618 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题值包含在第一个索引Basic < / p>

2016-03-05 13:52:50,620 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:连接 2016-03-05 13:52:50,621 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,629 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)Keep-Alive 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Content-Length 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)90 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Content-Type 2016-03-05 13:52:50,630 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)application / json; charset = UTF-8 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:主机 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Origin 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,631 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http://rat-investigation.rhcloud.com 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:Referer 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http://rat-investigation.rhcloud.com/ 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:User-Agent 2016-03-05 13:52:50,632 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,和Gecko一样) )Chrome / 48.0.2564.116 Safari / 537.36 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Client-IP 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)70.75.185.14 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-For 2016-03-05 13:52:50,633 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)70.75.185.14 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Host 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,634 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Port 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)80 2016-03-05 13:52:50,636 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Proto 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)http 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Forwarded-Server 2016-03-05 13:52:50,637 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)brain-ratmap.rhcloud.com 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)标题键是:X-Request-Start 2016-03-05 13:52:50,638 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)1 2016-03-05 13:52:50,639 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务-2)t = 1457203970487695

2 个答案:

答案 0 :(得分:0)

我认为我的Web服务有效的另一个原因是,因为登录方法被调用并执行。使用我的日志,我可以肯定地说我的代码正在处理中。

这是我的整个XHR来自开发人员工具:

请求网址:http://XXXX/login 请求方法:POST 状态代码:403禁止 远程地址:XX.XX.XX.XX:80

响应标题

  1. 接入控制允许凭证:真
  2. Access-Control-Allow-Headers:origin,content-type,accept,authorization,auth_token
  3. 访问控制 - 允许 - 方法:GET,POST,DELETE,PUT
  4. 访问控制允许来源:*
  5. 连接:保持活动
  6. 的Content-Length:65
  7. 内容类型:应用/ JSON
  8. 日期:太阳,2016年3月6日00:38:31 GMT
  9. Keep-Alive:timeout = 15,max = 99
  10. 服务器:WildFly / 9
  11. X供电-通过:暗流/ 1
  12. 请求标题

    1. 接受:application / json,text / plain, /
    2. 接受编码:gzip,deflate
    3. 接受语言:EN-US,EN; Q = 0.8
    4. 授权:基本
    5. 连接:保活
    6. 的Content-Length:130
    7. 内容类型:应用/ JSON;字符集= UTF-8
    8. 主机:XXXX.com
    9. 产地:http://caller-location
    10. 的Referer:http://caller-location
    11. User-Agent:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 48.0.2564.116 Safari / 537.36
    12. 我可以看到Authorization标头值仅包含“Basic”。这就是我在后端没有得到任何东西的原因。另外,我知道拥有Access-Control-Allow-Origin:*并不是一个好习惯,但出于测试目的,这很好。后来我会改变它。从我的调查中我发现允许的方法不必包含OPTIONS,你只需捕获它并返回2XX响应,我正在做。我按照this教程中的描述实现了我的后端。

      之前我遇到过预检问题,但我通过这样做here解决了这个问题。

答案 1 :(得分:0)

我发现了问题,正如我所怀疑的,问题是客户端而不是服务器。我没有以正确的方式使用$ http.post方法。我必须使用它,就像通过调用$ http.post(url,data,[config])在文档中显示的那样 - 配置包含我需要的所有头文件。但是因为我没有设法像这样调用函数并传入配置(我用谷歌搜索但我没有找到一种方法让数据为空而没有错误)。这就是为什么我只为所有http调用设置'Authorization'标题:

var authdata = CreateLoginHeader(username, password);
        $http.defaults.headers.common.Authorization = authdata;
        $http.post('http://brain-ratmap.rhcloud.com/api/v1/brain/study/login').then(SuccessLogin, ErrorLogin);

至少这允许我发送一个帖子请求,我在回复中找回了我的授权令牌。