Ajax调用API并传递Set-Cookie

时间:2016-10-21 09:10:40

标签: jquery ajax xmlhttprequest setcookie

我正在访问API,我必须首先发布登录信息。这是我通过的一个例子,我得到了成功的连接:

$.ajax({
        type: 'POST',
        url: 'https://server:port/api/users/_login',
        contentType: 'application/x-www-form-urlencoded',
        dataType: 'xml',
        data: {username: "user", password: "userPassword"},
        success: function(data, textStatus, jqXHR){ alert(textStatus); },
        error: function(jqXHR, textStatus, errorThrown){ alert(textStatus); }
        });

这是200响应:

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET, POST, DELETE, PUT
Access-Control-Allow-Origin:*
Content-Length:125
Content-Type:application/xml
Date:Fri, 21 Oct 2016 08:49:21 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Server:Jetty(9.2.14.v20151106)
Set-Cookie:JSESSIONID=h9823inizvhd2793nuqw7;Path=/api;Secure

任何后续调用都需要与JSESSIONID一起进行。所以我写了另一个电话如下 - 评论字段会告诉你我尝试和玩过的内容:

$.ajax({
            type: 'GET',
            url: 'https://server:port/api/datareq/guid/stats',
            dataType: 'xml',
            //crossDomain: true,
            xhrFields: { withCredentials: true },
            //data: data,
            success: function(data, textStatus, jqXHR){ alert(textStatus); },
            error: function(jqXHR, textStatus, errorThrown){ alert(textStatus);}
        });

如果我没有包含“与问题”相关的内容。 (或将其设置为假),我只是得到一个401:未经授权的电话。但是,如果我使用该标志,我会收到此消息:

通配符' *'不能用于“访问控制 - 允许 - 来源”#39;凭证标志为true时的标头。起源' null'因此不允许访问。 XMLHttpRequest的凭据模式由withCredentials属性控制。

现在我明白了发生了什么,但我无法绕过它。阅读相当多的堆栈帖子,但没有真正的工作。我不能访问api网络服务器以便在该方面进行任何更改,不幸的是,它是一个锁定的设备。我还要看看一些相关的文章,但如果有人知道并且可以对解决方法有所了解,那将非常感激。

测试平台:Windows 8.1

浏览器:Chrome 53.0.2785.143(官方版)m(32位)

1 个答案:

答案 0 :(得分:1)

不幸的是,浏览器的同源策略存在问题,因此据我所知,这在您尝试解决它的方式上是无法解决的。这意味着应该改变方法。这是我的建议:

  • 实现服务器端功能,该功能将根据您的客户端请求发送请求。此请求将定位目标网址
  • 服务器端功能应该接受目标站点的响应并将其返回到浏览器
  • 请求您的功能,而不是直接请求其他网站

因此,您的服务器端将用作代理来绕过同源策略。

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy