Javascript 添加授权标头后使用OPTIONS方法代替GET

Javascript 添加授权标头后使用OPTIONS方法代替GET,javascript,jquery,http,Javascript,Jquery,Http,我有一个usb指纹扫描仪,可以在以下端口和ip上使用REST进行访问:它在Postman中正常工作,如下面的屏幕截图所示: 但是,我无法让它与jQueryAjax一起工作 var url2 = 'http://127.0.0.1:30666/foh/UCBioAPI/devices'; $.ajax({ type: "GET", url: url2, headers: {

我有一个usb指纹扫描仪,可以在以下端口和ip上使用REST进行访问:它在Postman中正常工作,如下面的屏幕截图所示:

但是,我无法让它与jQueryAjax一起工作

var url2 = 'http://127.0.0.1:30666/foh/UCBioAPI/devices';
            $.ajax({
                type: "GET",
                url: url2,
                headers: {
                    "authorization": "Basic " + btoa('user' + ":" + 'user'),
                },
                success: function (data) {
                    console.log(data);
                    alert('done!');
                }, error: function (data) {
                    console.log(data);
                    alert('error');
                }
            });
发生的情况是(设备可能不接受选项,并且不可修改):


问题是我无法改变设备的工作方式。我唯一可以修改的就是我的javascript代码。我的服务器在IIS 10中工作,基本上是同一个域-localhost。提前感谢。

在发送前尝试
功能,而不是
标题

beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic " + btoa('user' + ":" + 'user'));
}

尝试在发送前使用
函数,而不是
标题

beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic " + btoa('user' + ":" + 'user'));
}

邮递员并没有用CORS沙盒,而是完全跳过了它。浏览器以不同的方式工作。在执行实际请求之前,它发送数据进行CORS身份验证。选项请求就是那个。它包含源、主机和实际请求类型,因此服务器可以决定是否接受它

如果你无法更改设备上的代码,那么你就倒霉了,它将无法工作

为了以防万一,有一篇关于CORS的好文章:

邮递员没有用COR沙盒,而是完全跳过它。浏览器以不同的方式工作。在执行实际请求之前,它发送数据进行CORS身份验证。选项请求就是那个。它包含源、主机和实际请求类型,因此服务器可以决定是否接受它

如果你无法更改设备上的代码,那么你就倒霉了,它将无法工作

为了以防万一,有一篇关于CORS的好文章:

您正在从localhost请求127.0.0.1,因为浏览器认为这是跨域的,所以它会首先发出选项请求,而您的服务器拒绝该请求。将您的服务器更改为允许跨域或使用localhost而不是IP地址尝试将其设置为“https”或将127.0.0.1更改为localhost。“问题是我无法更改设备的工作方式。”-然后您无法向其发出此类客户端跨域请求,这么简单。在您的
jQuery
请求中尝试使用
beforeSend
,如下:
beforeSend:function(xhr){xhr.setRequestHeader(“Authorization”,“Basic”+btoa('user'+“:“+'user');}
您正在从本地主机请求127.0.0.1,因为浏览器认为这是跨域的,所以它首先发出一个选项请求,而您的服务器拒绝了该请求。将您的服务器更改为允许跨域或使用localhost而不是IP地址尝试将其设置为“https”或将127.0.0.1更改为localhost。“问题是我无法更改设备的工作方式。”-然后您无法向其发出此类客户端跨域请求,就这么简单。试着在你的
jQuery
请求中使用
beforeSend
,就像这样:
beforeSend:function(xhr){xhr.setRequestHeader(“Authorization”,“Basic”+btoa('user'+“:“+'user'));}
它只是“headers:{}”的另一种语法,确切地说,它只是“headers:{}”的另一种语法,CORS在邮递员上下文中没有意义,因为请求没有来源(完成请求的url)。这就像当你直接在浏览器中写一个url,与页面中的请求相反(html链接、表单post、javascript调用),准确地说,CORS在邮递员上下文中没有意义,因为请求没有来源(完成请求的url)。这就像您直接在浏览器中编写url一样,与页面中的请求相反(html链接、表单帖子、javascript调用)