使用jQuery AJAX使得两个请求

问题描述:

我试图调用使用基本身份验证一个Ajax请求基本身份验证, 为我添加以下代码,使用jQuery AJAX使得两个请求

url: appSettings.dataURL+'/app/signature', 
type: 'GET', 
crossDomain: true, 
dataType: 'html', 
context : this, 
cache : true, 
headers: {"Authorization": "Basic " + btoa('username' + ":" + 'password')} 

这将使两个请求,一个认证和另一当我检查网络选项卡时无需身份验证。为什么?

看到屏幕截图,

enter image description here

是否有可能避免这种情况?

注意:这只发生在跨域请求。

+1

这可能是因为跨域头未设置。看看[这个问题](http://*.com/questions/5507234/how-to-use-basic-auth-with-jquery-and-ajax)在jQuery中的基本身份验证已被覆盖。 – timmyRS

+2

第一个请求是一个** preflight **请求,用于检查服务器是否接受请求方法,并且允许该凭据,这只会发生在** CORS **请求中。 AFAIK如果您提出跨域请求,则无法避免这种情况 – Und3rTow

跨站请求遵循一定的安全规则。如果只自定义页眉设置可由simple,单个请求是:

  • 接受
  • 接受语言
  • 内容语言
  • 内容类型

和内容类型是以下之一:

  • application/x- WWW窗体-urlencoded
  • 的multipart/form-data的
  • text/plain的

您发送Authorization标题,默认情况下请求HTML,所以需要一个"pre-flight request"

不像简单请求,“预检”请求首先通过OPTIONS方法向另一个域上的资源发送HTTP请求,以确定实际请求是否安全发送。跨站请求是这样预检的,因为它们可能会影响用户数据。

初始OPTIONS请求,而不Authorization是安全的,因为服务器只需要与Access-Control-*头,让浏览器知道如果完全要求是确定继续回应。然后你的实际请求正在经历Authorization,所以一切都按预期工作。

XMLHttpRequest对象也让你指定你sending a request with credentials,并可能切换到只有一个要求:

xhrFields: { withCredentials: true }