当前位置: 首页 > 面试题库 >

在Chrome或Firefox中,jquery $ .ajax调用会导致401未经授权的响应,但在IE中有效

姜业
2023-03-14
问题内容

我有一个运行在网页上的脚本,该脚本需要使用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=713

Response 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

  • 我开发了android应用程序,可以将照片备份到flickr。 我有下一个问题几次:有时我收到401响应(响应代码: 401,响应消息:未授权,错误:oauth_problem=token_rejected),而不是访问令牌的响应,在将请求令牌交换为访问令牌期间。 这种问题主要发生在我的互联网连接不好的时候(当我起诉3g互联网时)。 以下是显示此行为的日志: 之后,我在浏览器中为用户打开下一个网址