添加授权标头后的OPTIONS方法而不是GET

时间:2018-03-05 11:04:28

标签: javascript jquery http

我有一个usb指纹扫描仪,可以通过以下端口和ip使用REST访问: http://127.0.0.1:30666/foh/UCBioAPI/devices 它在Postman中正常工作,如下面的截图所示:

enter image description here

但是我无法使用jQuery Ajax。

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');
                }
            });

这是怎么回事(设备不接受OPTIONS可能并且不可修改): enter image description here

enter image description here

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

2 个答案:

答案 0 :(得分:3)

Postman没有使用CORS沙箱并完全跳过它。浏览器以不同的方式运行。它在执行实际请求之前发送用于CORS身份验证的数据。 OPTIONS请求就是那个。它包含原始,主机和实际请求类型,因此服务器可以决定是否应该接受它。

如果您无法更改设备上的代码,那么您将失去运气,但它无法正常工作。

以防万一,有一篇关于CORS的好文章: https://www.html5rocks.com/en/tutorials/cors/

答案 1 :(得分:-1)

尝试使用beforeSend功能代替headers

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