使用jQuery ajax进行基本身份验证发出两个请求

我试图用基本身份验证调用ajax请求,

为此,我添加了以下代码,

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

当我用网络选项卡检查时,这将产生两个请求,一个具有认证而另一个没有认证.为什么?

看屏幕截图,

《使用jQuery ajax进行基本身份验证发出两个请求》

有可能避免这种情况吗?

注意:这仅适用于跨域请求.

最佳答案 跨站点请求遵循某些安全规则.如果唯一的自定义标头集是:
simple,则可以进行单个请求:

>接受
>接受语言
>内容 – 语言
>内容类型

并且内容类型是以下之一:

> application / x-www-form-urlencoded
> multipart / form-data
> text / plain

您正在发送Authorization标头并请求HTML,因此默认情况下需要“pre-flight request”

Unlike simple requests, “preflighted” requests first send an HTTP request by the OPTIONS method to the resource on the other domain, in order to determine whether the actual request is safe to send. Cross-site requests are preflighted like this since they may have implications to user data.

没有授权的初始OPTIONS请求是安全的,因为服务器只需要使用Access-Control- *标头进行响应,让浏览器知道您的完整请求是否可以继续.然后你的授权实际请求正在进行,所以一切都按预期工作.

XMLHttpRequest对象允许您指定您是sending a request with credentials并且可能只切换到一个请求:

xhrFields: { withCredentials: true }
点赞