【问题标题】:Cross origin request to service using HTTP Basic Auth使用 HTTP 基本身份验证对服务的跨源请求
【发布时间】:2012-08-15 20:40:16
【问题描述】:

如何向使用 HTTP Basic Auth 的 Web 服务发出跨源请求?

我的客户端是用 jQuery 开发的,我的 RESTful/JSON Web 服务已经过修改,因此返回了“跨域”标头。

客户端代码:

$.ajax({
    url: "http://localhost:3000/applications", // external service
    async: false,
    beforeSend: function (req) {
        req.setRequestHeader("Authorization", "Basic "+ base64_value)
    },
    success: function (applications) { $.each(applications, function(i, app) {
        list.push(app)
    })}
})

客户端代码同时触发 OPTIONS 和 GET 请求(在 Chrome 中)。 OPTIONS 请求失败并返回 401。

对于 GET 请求我应该使用哪些标头,对于 OPTIONS 请求我应该使用哪些标头? GET 和 OPTIONS 应该使用哪些服务器响应标头?

我使用 cURL 和完全相同的授权标头向服务发出请求,并且这有效(即与 JavaScript 代码中的用户名/密码相同)。所以我猜这与 headers 和 OPTIONS 方法有关。

【问题讨论】:

  • 尝试使用:- type:"GET" or type:"POST"
  • 添加类型:“GET”没有帮助。
  • 该网址在我的浏览器中有效,因此授权标头是正确的,但未在 OPTIONS 请求中发送。

标签: jquery authentication cross-domain


【解决方案1】:

我不知道这是可能的,但在阅读之后,你实际上可以做到这一点。您的代码错误来自您在 beforeSend() 中定义的 Header 值

标头名称是正确的,但这是你必须如何构造你的值(你需要像 base64.js 这样的 Base64 编码器)

var base64 = Base64.encode(用户名 + ":" + 密码)

然后你就可以使用你编写的 jQuery 块了。

【讨论】:

  • 更改了代码但没有运气。我使用 cURL 使用相同的授权标头发出了一个测试请求并且有效,所以我猜这个问题与 OPTIONS 请求有关。
  • 我在 OPTIONS 请求中看不到任何授权标头。
猜你喜欢
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多