【问题标题】:False https request fails the server错误的 https 请求使服务器失败
【发布时间】:2016-06-19 12:21:10
【问题描述】:

当我运行 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。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://YYYY' 不允许访问。响应的 HTTP 状态代码为 500。

就像我说的,我知道如果我会处理我的异常并且仍然​​会返回响应,那么这个 POST 方法应该可以工作。但是我要问的是,我的基本身份验证为什么不起作用 - 当我在服务器端收到请求时,标头中的 Authenticate 值不包含“基本”以外的任何内容。

这也是我对所有标头值的日志输出[键;值的大小;1 个索引上的值]:

2016-03-05 13:52:50,610 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)标题键是:接受 2016-03-05 13:52:50,612 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,612 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)应用程序/json,文本/纯文本,/ 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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,613 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)gzip,放气 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 信息 [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)标题值包含在第一个索引基本

2016-03-05 13:52:50,620 INFO [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)标题键是:连接 2016-03-05 13:52:50,621 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,629 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)保持活动 2016-03-05 13:52:50,630 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)标题键是:内容长度 2016-03-05 13:52:50,630 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,630 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,631 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)应用程序/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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,631 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,631 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,632 信息 [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)标题键是:用户代理 2016-03-05 13:52:50,632 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,633 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,634 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,634 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,636 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,637 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,638 信息 [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 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)1 2016-03-05 13:52:50,639 信息 [brain.ratmap.rhcloud.com.web.service.StudyManagerService](默认任务 2)t=1457203970487695

【问题讨论】:

  • 您需要在服务器上启用 CORS 并以不同于 POST 的方式处理 OPTIONS 预检请求
  • 我很确定这不是它。我现在通过捕获它来处理异常,并且由于凭据为空,我返回了 403。如果你是对的,那么我将不得不恢复同样的失败——XMLHttpRequest 无法加载XXXX/api/v1/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'YYYY' 不允许访问。响应的 HTTP 状态代码为 500。
  • 我使用link 1link 2 来实现我的应用程序。这就是为什么我认为问题出在客户端的原因,因为它应该产生相同的结果,但事实并非如此(POST XXXX/login 403 (Forbidden))。
  • No 'Access-Control-Allow-Origin' header is present 是 CORS 错误,您的后端也显示 500 服务器错误
  • 在 chrome 中打开并打开浏览器开发工具网络。可以看到那里提出的请求。可以准确查看发送/返回的内容、状态、cookie 等。可能是 OPTIONS 预检请求失败

标签: angularjs http post


【解决方案1】:

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

这是我从开发者工具获得的全部 XHR:

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

响应标头

  1. 访问控制允许凭据:true
  2. Access-Control-Allow-Headers:来源、内容类型、接受、授权、auth_token
  3. 访问控制允许方法:GET、POST、DELETE、PUT
  4. 访问控制允许来源:*
  5. 连接:保持活动状态
  6. 内容长度:65
  7. 内容类型:应用程序/json
  8. 日期:2016 年 3 月 6 日星期日 00:38:31 GMT
  9. 保持活动状态:超时=15,最大值=99
  10. 服务器:WildFly/9
  11. X-Powered-By:Undertow/1

请求标头

  1. 接受:应用程序/json,文本/纯文本,/
  2. 接受编码:gzip、放气
  3. 接受语言:en-US,en;q=0.8
  4. 授权:基本
  5. 连接:保持活动状态
  6. 内容长度:130
  7. Content-Type:application/json;charset=UTF-8
  8. 主机:XXXX.com
  9. 来源:http://caller-location
  10. 推荐人:http://caller-location
  11. User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36

我可以看到 Authorization 标头值仅包含“Basic”。这就是我在后端没有得到任何东西的原因。顺便说一句,我知道拥有 Access-Control-Allow-Origin: * 不是一个好习惯,但出于测试目的,它很好。以后我会改的。从我的调查中我看到允许的方法不必包含 OPTIONS,你只需要抓住它并返回一个 2XX 响应,我正在这样做。我按照this 教程中的描述实现了我的后端。

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

【讨论】:

    【解决方案2】:

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

    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);
    

    至少这允许我发送一个发布请求,并且我在响应中取回了我的授权令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多