使用CORS进行跨域Ajax请求。在httpbin.org上测试不起作用

时间:2014-02-15 05:48:54

标签: javascript jquery ajax cors

我知道这个问题已经讨论了很多。我经历了其他所有SO的问题,但仍然没有解决方案。

我的测试用例很简单。

要求

  • 我需要从本地服务器( localhost:63342 )获得 httpbin.org 网站的授权。基本上我使用 http://httpbin.org/basic-auth/user/passwd 来测试HTTP Basic Auth。
  • 我使用GET请求通过 jQuery.ajax 功能测试基本HTTP身份验证
  • 我需要使用完全REST来完成这项工作,因为实际上我的真正的目标是通过使用GET请求的teamcity服务器上的REST API请求获得授权。

到目前为止我做了什么

其实我尝试了很多东西(使用标题( Access-Control-Allow-Credentials Access-Control-Allow-Origin ),尝试使用 beforeSend 功能,处理jsonP等)。没有运气。

<html>
<head>
    <script src="./jquery-1.11.0.js"></script>
</head>
<body>
<div id="target">
    Click here
</div>
<script>
$("#target").click(function() {
    var username = 'user';
    var password = 'passwd';

    $.ajax({
        type: "GET",
        beforeSend: function (xhr) {
            xhr.withCredentials = true;
            xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
        },

        // I know, this one is redundant
        xhrFields: { withCredentials: true },
        crossDomain: true,
        headers: { 'Access-Control-Allow-Credentials': true },
        headers: { 'Access-Control-Allow-Origin': '*' },
        // this one is redundant too
        headers: { 'Authorization': "Basic " + btoa(username + ":" + password) },
        //contentType: "application/json; charset=utf-8",
        dataType: 'jsonp',
        url: "http://httpbin.org/basic-auth/user/passwd",

        success: function(data, textStatus, jqXHR){
            alert('success');
        },

        error: function(jqXHR, textStatus, errorThrown ) {
            alert('failure');
        },

        // I don't know if I have to write it directly or not
        username: 'user',
        password: 'passwd'
    });
});
</script>
</body>
</html>

我得到的结果

在我的所有测试中,我得到了不同的结果。上面的代码导致httpbin显示auth弹出窗口以输入凭据(这很奇怪,因为我在标头中发送用户/传递对)。我得到的另一个结果是:UNAUTHORIZED状态(这是可以理解的),“错误”错误信息(这是无意义的)等等......

jQuery和跨域请求的专家,请帮助弄清楚应该在这里做什么。

P.S。我知道这与CORS问题密切相关,但我尝试以不同的方式设置 Access-Control-Allow-Origin ,但没有成功。

更新

实际上我的最初目标是能够从JS代码调用CI作业(使用基本HTTP AU身份验证通过REST API调用TeamCity作业)。

所以,对于TeamCity,我相信有一个错误(在REST API插件中) - 任何有兴趣的人,请跟踪问题TeamCity's REST API Plugin doesn't allow to authenticate using Basic HTTP Authentication

关于httpbin.org - 测试完全无效。

非常感谢!

0 个答案:

没有答案