我已经保护了RestFul Web服务,它有几个用户可以访问的界面。用户可以在适当的授权和身份验证之后访问这些接口,即通过https。我已经为FireFox下载了一个RestFul客户端,我正在设置一些自定义标头,并且在正文中我提供了登录凭据。我能够登录Web服务并能够访问其他接口。
但我正在使用jQuery编写代码,Ajax通过我试图调用此服务,但我收到“HTTP / 1.1 400错误请求”作为响应。以下是代码
<script type="text/javascript">
var xhr,jqXHR;
if(!xhr && typeof XMLHttpRequest != "undefined")
{
xhr = new XMLHttpRequest();
}
self.ajax = function(uri, method, data) {
var request = {
url: "https://mysite/login",
type: "Post",
// Content-Type: "application/json",
//headers: { 'My-Key': 'ACNDSDSKER$%$%$#$#$#$#$"' },
accepts: "application/json",
data: { // the parameters of the request. This should be adapted to your case
"uid": username,
"password": password
},
cache: false,
dataType: 'json',
data: JSON.stringify(data),
beforeSend: function (xhr) {
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
xhr.setRequestHeader("My-Key", btoa("ACNDSDSKER$%$%$#$#$#$#$"));
},
success:function (jqXHR) {
alert("ajax success " + jqXHR.status);
},
error: function(jqXHR) {
console.log("ajax error " + jqXHR.status);
}
};
return $.ajax(request);
首先,我尝试使用“headers”属性提供自定义标头,但它会出现相同的错误。 其次我用beforeSend函数尝试了这个,但结果是一样的。 第三,我尝试使用基本HTTP协议对登录凭据进行编码,但没有用。它给出了同样的错误。
注意: - 在Rest Client中,我不需要提供“授权”作为自定义标头。它使用的协议还有“HTTP身份验证 - OAuth协议”。
请让我知道Rest Client的相同请求可以正常工作的原因,但不能使用jQuery,Ajax编写的代码。
答案 0 :(得分:0)
您发布的代码有点令人困惑。你的第二部分在<script></script>
元素之外。这只是一个复制/粘贴错误吗?否则,请将您的代码放在<script></script>
标记内,然后重新绑定。