使用 XHR 进行基本身份验证

2023-12-14

我正在尝试从需要基本身份验证的服务器获取一些响应。所以当我使用curl作为:

curl -u user:pass http://myserver.com/get/send-my-data

它给了我正确的回应。 但是当我使用 jquery AJAX 创建 XHR 请求时。我遇到 403 错误。 这是我的 AJAX 设置:

            $.ajax ({
            type: 'GET',
            url: 'http://myserver.com/get/send-my-data',
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Authorization", "Basic" + encode64(user:pass)); // I have calculated base64 encoded value of user:pass correctly.
            },
            success: function(d) { console.log(d); },
            crossDomain: 'true'
        });

我收到 403 回复。这是使用 -v 选项从curl 获取的请求标头。

> POST /get/send-my-data HTTP/1.1
**> Authorization: Basic ********** // Removed original code deliberately**
> User-Agent: curl/7.27.0
> Host: localhost:8080
> Accept: */*
> Content-Length: 264
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=----------------------------3c0e06f1e2b4

这是从我的 XHR 请求的 Charles 处获得的标头

OPTIONS /get/send-my-data HTTP/1.1
Host    10.40.55.110:4502
Access-Control-Request-Method   GET
Origin  http://localhost:8080
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML,     like Gecko) Chrome/22.0.1229.79 Safari/537.4
**Access-Control-Request-Headers    origin, authorization, accept**
Accept  */*
Referer http://localhost:8080/proof/check.html
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.3

我不明白为什么会发生这种情况?为什么我的 XHR 请求标头没有显示授权标头(如curl 标头中所示)。请建议我哪里做错了。

PS:这是跨域请求。


我遇到这个问题是因为我正在发送跨域请求并且请求使用 POST 方法。所以当我们在跨域服务器上进行POST时,就有一个概念飞行前出现在图片中。

在 Preflight 中,它仅发送选项标头并告诉资源将命中哪个请求。然后服务器决定发送请求是否安全。

然后如果服务器发送 OK,则发送实际请求。 也许这些线会更具解释性。

预检请求首先通过 OPTIONS 方法向其他域上的资源发送 HTTP 请求,以确定实际请求是否可以安全发送。 跨站点请求会像这样进行预检,因为它们可能会对用户数据产生影响。特别是,在以下情况下,请求会被预检:

它使用 GET、HEAD 或 POST 以外的方法。另外,如果 POST 用于发送 Content-Type 不是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 的请求数据,例如如果 POST 请求使用 application/xml 或 text/xml 将 XML 有效负载发送到服务器,则该请求将被预检。

它在请求中设置自定义标头(例如,请求使用 X-PINGOTHER 等标头)

来源:MDN CORS 文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XHR 进行基本身份验证 的相关文章

随机推荐