JQuery Ajax 基本身份验证 header 无法正常工作

标签 jquery ajax rest http basic-authentication

我正在尝试使用 JQuery 在服务器上发出简单的 GET 请求。

    $.ajax({
        headers: {
            "Authorization": "Basic " + btoa("hello" + ":" + "world")
        },
        url: "http://hello.world?Id=1",
        method: "GET",
        success: function () {
        },
    }).then(function () {
    });

问题是当发送请求时,身份验证 header 没有正确放入请求中:

Host: hello.world
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Origin: null
Connection: keep-alive
Cache-Control: max-age=0

最佳答案

向另一个来源发送 HTTP 请求时,请求可以是“简单”或“非简单”。如果请求使用其中一个(或两者),则请求变得不简单

  • 除 HEAD、GET 或 POST 之外的 HTTP 动词;或者,
  • AcceptAccept-LanguageContent-LanguageContent-Type 以外的请求 header

由于您的请求设置了 Authorization header ,因此它并不简单。

当请求不简单时,浏览器首先使用 OPTIONS 方法发送一个预检 请求。这就是您在问题中看到的请求。 (参见 HTML5 Rocks on preflight requests 和 [我对 How does Access-Control-Allow-Origin header work? 的回答)。预检不包括非简单 header ,但将它们列在 Access-Control-Request-Headers header 中。

如果服务器正确响应预检,浏览器将然后发出真正的请求。在这种情况下,浏览器正在寻找来自服务器的响应 header Access-Control-Allow-Headers: Authorization 以指示非简单的 Authorization header 可以发送实际请求。您的服务器必须在其响应中包含该 header 。

关于JQuery Ajax 基本身份验证 header 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34493256/

相关文章:

Javascript - 如何在使用 Google App Engine 时加载 javascript 库?

javascript - Jquery 日期选择器下拉列表显示当前日期而不是所选日期

javascript - 如何使用 DataTables 中的编辑器并从 ajax 调用数据

jquery - 从 jQuery 1.4 升级到 1.5 后,发布数据被覆盖

javascript - Jquery ajax错误导致无限循环

java - 从整体迁移到微服务

javascript - 复选框唯一 ID 与样式脚本冲突

rest - 如何使用 REST 请求获取 Paypal 访问 token

spring - 如何在 Spring Boot/Spring Security 中允许用户只访问他们自己的数据?

Jquery UI 可排序 ConnectWith 无法双向工作