我有一个运行在网页上的脚本,该脚本需要使用JQuery $ .ajax方法(当前使用jquery
1.7.2)将多个GET请求提交到不同域上的服务端点。我的ajax调用可以在IE(9、10、11)中运行,但在Firefox和Chrome中显示401未经授权的响应失败。Chrome中的其他错误消息的一部分是“访问此资源需要完全身份验证”。
我的ajax调用是这样设置的(这些失败的请求的dataType为“ json”,并且async为true):
$.ajax({
url: url,
type: "GET",
async: isAsync,
dataType: dataType,
username: user,
password: pswd,
success: function (response, status) {
// success code here
},
failure: function (response, status) {
// failure code here
},
complete: function (xhr, status) {
// on complete code here
}
});
我正在传递访问服务所需的用户名和密码,这在IE中有效。我知道JQuery
ajax函数将正确处理身份验证,因此,如果返回响应指示需要授权,它将使用提供的凭据正确发出该请求。我在这里想念什么吗?我是否需要手动添加Authorization标头才能使其正常工作?
更新:这是Chrome和IE通过F12调试工具报告的请求,响应和cookie信息(某些信息已替换为[…已删除…])
Chrome(42.0.2311.90 m)
Response Headers
access-control-allow-credentials:true access-control-allow-origin:[…removed…] access-control-expose-headers: cache-control:private,max-age=0,must-revalidate connection:keep-alive content-encoding:gzip content-length:296 content-type:text/html;charset=ISO-8859-1 date:Tue, 21 Apr 2015 20:55:12 GMT expires:Tue, 21 Apr 2015 20:55:12 GMT p3p:CP=”NON DSP COR CURa PSAa PSDa OUR NOR BUS PUR COM NAV STA” set-cookie:JSESSIONID=qd-app-1348vf1vrksvc76oshcwirvjp.qd-app-13;Path=/;Secure;HttpOnly set-cookie:NSC_vt1.sbmmzefw.dpn!-!IUUQT=ffffffff09091c3945525d5f4f58455e445a4a42378b;path=/;secure;httponly status:401 Unauthorized vary:Accept-Encoding version:HTTP/1.1 www-authenticate:Basic realm=”Rally ALM”
Request Headers
:host:rally1.rallydev.com :method:GET :path:[…removed…] :scheme:https :version:HTTP/1.1 accept:application/json, text/javascript, /; q=0.01 accept-encoding:gzip, deflate, sdch accept-language:en-US,en;q=0.8 origin:[…removed…] referer:[…removed…] user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Response Cookies
JSESSIONID qd-app-1348vf1vrksvc76oshcwirvjp.qd-app-13 NSC_vt1.sbmmzefw.dpn!-!IUUQT ffffffff09091c3945525d5f4f58455e445a4a42378b
IE 11
Request Headers
Request GET […removed…] Referer […removed…] Accept
application/json, text/javascript, /; q=0.01 Accept-Language en-US Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Host […removed…] Connection Keep-Alive Cache-Control no-cache Cookie
JSESSIONID=qd-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-08; NSC_vt1.sbmmzefw.dpn!-!IUUQT=ffffffff09091c3145525d5f4f58455e445a4a42378b; RALLY-Detail-treeCollapsed=false; ZSESSIONID=RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU; SUBBUCKETID=713Response Headers
Response HTTP/1.1 200 OK RallyRequestID qd-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-0810353108 Expires Thu, 01 Jan 1970 00:00:00 GMT Content-Type text/javascript; charset=utf-8 ETag “0101c2c8d3463ee3c1a4f950d4142b7d3” P3P CP=”NON DSP COR CURa PSAa PSDa OUR NOR BUS PUR COM NAV STA” Cache-Control private,max-age=0,must-revalidate Date Tue, 21 Apr 2015 20:58:17 GMT Connection keep-alive Set-Cookie ZSESSIONID=RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU;Path=/;Domain=[…removed…];Secure;HttpOnly Set-Cookie SUBBUCKETID=713;Path=/;Domain=[…removed…];Secure;HttpOnly Content-Length 319
Cookies
Sent JSESSIONID qd-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-08
Sent NSC_vt1.sbmmzefw.dpn!-!IUUQT ffffffff09091c3145525d5f4f58455e445a4a42378b Sent RALLY-Detail-treeCollapsed false Sent ZSESSIONID RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU Sent SUBBUCKETID 713 Received ZSESSIONID RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU At end of session […removed…] / Yes Yes Received SUBBUCKETID 713 At end of session […removed…] / Yes Yes
我遇到了一个jquery论坛帖子,其中包含有关此问题的一些其他信息。根据在此找到的内容,将其添加到$ .ajax调用中:
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', makeBaseAuth(user, pswd));
}
makeBaseAuth()使用btoa()函数的方式如下:
makeBaseAuth: function(user, pswd){
var token = user + ':' + pswd;
var hash = "";
if (btoa) {
hash = btoa(token);
}
return "Basic " + hash;
}
这似乎在Chrome中现在可以正常使用,我没有收到登录提示或401响应,请求正在处理中,我得到了预期的响应。我也删除了该选项,xhrFields: {withCredentials: true}
因为这似乎不是必需的。由于某种原因,这在Firefox中尚不可用,在Firefox调试器中,我实际上无法通过JavaScript进行任何体面的调试来查看问题所在,该脚本的工作方式是将其加载到网页中作为一个匿名脚本,我对此没有任何控制权。我有办法在IE和Chrome中找到脚本,但出于某种原因却没有Firefox。我会认为这是一个胜利,只需使其能够在Chrome中运行,这要归功于每个人都向我指引了正确的方向!
我正在使用Chris Kacerguis的Codeigniter中的restserver,并设置rest_auth会话。当我登录时,我访问view.php通过file_get_contents得到响应的页面,它返回401未经授权。当我在新选项卡中访问API的直接页面时,它会正确返回json。 景色。php以以下方式加载API内容: 答复如下: 遇到一个PHP错误 严重性:警告 消息:file_ge
我想使用服务帐户实现谷歌表API请求。我创建了这个代码: 但是我得到了这个错误: com.google.api.client.auth.oauth2.TokenResponseException: 401 未经授权 在这个方法中 你知道我该如何解决这个问题吗?
问题内容: 我有以下ajax调用,该调用在Firefox和Chrome中完美运行,但在IE中则不行: 我知道一个事实,所有变量都传递正确的内容,而$ .ajax确实传递所有参数/值。 这就是我遇到的错误: 日志:@错误:未定义日志:@状态:parsererror日志:@状态文本:确定 我知道IE上的缓存问题,并实施了一个随机参数来清除它。 这是我得到的JSON(我可以使用Charles看到它) 最
问题内容: 我正在用jQuery进行ajax调用。Ajax调用在IE 7中可以正常工作,但是FireFox 3在进行此调用时始终会刷新整个页面。Ajax调用正在发布到ASP.NET页面方法。 jQuery是否有问题,还是我只是缺少某些设置? 调用是通过html按钮的onclick事件进行的。我在进行此ajax调用的方法中尝试了 ,但是FireFox中的完全刷新仍在继续。 我尝试设置async =
问题内容: 我为一个朋友做了一些网络工作,帮助了他。他需要的一部分是在他的站点上更改几段文字的简单方法。与其让他编辑HTML,我决定提供一个带有消息的XML文件,然后我使用jQuery将它们从文件中拉出并插入到页面中。 它的效果非常好…在Firefox和Chrome中,在IE7中效果不佳。我希望你们中的一个能告诉我原因。我做了一个公平的但谷歌搜索,但是找不到我想要的东西。 这是XML: 这是我的j
问题内容: 这是我的代码,用于在用户忘记密码的情况下重置用户密码。数据通过AJAX请求发送到PHP代码,PHP代码根据输入的有效性简单地回显“ Y”或“ N”。 问题是,AJAX调用在Firefox 19和IE 9中不起作用。我没有在其他版本的IE中尝试过。AJAX调用可在chrome和safari中完美运行。有人遇到过同样的问题吗?有人可以帮忙吗? 问题答案: 您必须使用事件对象作为事件处理程序