用于基本授权的 ajax 设置标头不起作用
Posted
技术标签:
【中文标题】用于基本授权的 ajax 设置标头不起作用【英文标题】:ajax set headers for basic authorization does not work 【发布时间】:2015-03-03 20:15:47 【问题描述】:这是我的代码,我想请求一个跨域url以使用基于基本授权的API。
但它不起作用。请求标头中没有显示授权信息。
$(document).ready(function ()
$.ajaxSetup(
headers:
'Authorization': "Basic amlhemhc6SUxvdmVAkYXk="),
'Content-Type': 'application/json;charset=utf-8'
);
var request = $.ajax(
url: "http:localhost:8080/query",
type: "POST",
data: '"sql":"select count(*) from summary"',
dataType: "json"
);
request.done(function (msg)
alert(msg);
);
request.fail(function (jqXHR, textStatus)
alert("Request failed: " + textStatus);
);
);
【问题讨论】:
有点不相关,但请不要对 JSON 对象使用字符串。请改用JSON.stringify('sql': ....)
!
***.com/questions/5507234/…
你得到这个worin了吗?
【参考方案1】:
你的 ajax 应该看起来像这样,如果它仍然不起作用,那么你可以看看我关于 CORS here 的帖子之一,看看你面临什么问题
ajaxOpts =
url:"https://"+server_name+"/post_link/",
crossDomain:true,
xhrFields: withCredentials:true,
type:'POST',
data: jQuery('#some_form').serialize(),//or your data
dataType:'json',
success:
//do something
,
error:
//do something
,
;
jQuery.ajax(ajaxOpts);
希望对你有帮助
【讨论】:
【参考方案2】:尝试将以下回调添加到您的$.ajax()
:
var request = $.ajax(
url: "http:localhost:8080/query",
type: "POST",
data: '"sql":"select count(*) from summary"',
dataType: "jsonp",
processData: 'false',
xhrFields:
withCredentials: 'true'
,
crossDomain: 'true'
);
【讨论】:
为了支持 cors 域请求,我在响应中添加了 Access-Control-Allow-Origin:*。因为当我按照你的建议进行修改时,抛出这样的错误(通配符 '*'当凭据标志为真时,不能在“Access-Control-Allow-Origin”标头中使用。因此,不允许访问源“localhost:9000”。) 您是否尝试过输入确切的域而不是使用*
?由于我们使用的是凭据,因此您将收到此错误,因为它是安全的一部分。 Access-Control-Allow-Origin:your domain
是的,但仍然响应 401 状态码。请求标头中没有字段授权,应该在那里。以上是关于用于基本授权的 ajax 设置标头不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ReadyApi为什么授权标头不起作用,但基本的auth选项卡确实如此
setRequestHeader 不起作用,我想设置我的标头,然后在 Amazon EC2 的 ajax 中发出 GET 请求