【发布时间】:2013-12-18 07:09:13
【问题描述】:
我已经保护了 RestFul 网络服务,它有几个用户可以访问的界面。用户可以在适当的授权和身份验证后访问这些接口,即通过 https。我已经下载了一个用于 FireFox 的 RestFul 客户端,我从中设置了一些自定义标头,并且在正文中我提供了登录凭据。我能够登录到 Web 服务并能够访问其他界面。
但我正在使用 jQuery、Ajax 编写代码,我试图调用此服务,但我收到“HTTP/1.1 400 Bad Request”作为响应。以下是代码
<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 编写的代码的原因。
【问题讨论】: