使用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')}
这将使两个请求,一个认证和另一当我检查网络选项卡时无需身份验证。为什么?
看到屏幕截图,
是否有可能避免这种情况?
注意:这只发生在跨域请求。
答
跨站请求遵循一定的安全规则。如果只自定义页眉设置可由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 }
这可能是因为跨域头未设置。看看[这个问题](http://*.com/questions/5507234/how-to-use-basic-auth-with-jquery-and-ajax)在jQuery中的基本身份验证已被覆盖。 – timmyRS
第一个请求是一个** preflight **请求,用于检查服务器是否接受请求方法,并且允许该凭据,这只会发生在** CORS **请求中。 AFAIK如果您提出跨域请求,则无法避免这种情况 – Und3rTow