未能添加 HTTP 标头

Posted

技术标签:

【中文标题】未能添加 HTTP 标头【英文标题】:Fail to add an HTTP header 【发布时间】:2017-04-26 16:27:51 【问题描述】:

我正在尝试生成带有授权标头的 HTTP 请求:

$.ajax(
            type: 'GET',
            url: "https://subdomain.domain.com/login",
            beforeSend: function (xhr) 
                xhr.setRequestHeader ("Authorization", "Basic " + btoa('username' + ":" + 'password'));
            )

但此代码生成的请求不包含授权标头:

选项 /login HTTP/1.1

主机:subdomain.domain.com

连接:保持活动

编译指示:无缓存

缓存控制:无缓存

访问控制请求方法:GET

来源:http://localhost:3021

用户代理:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, 像壁虎)Chrome/12.3.4567.890 Safari/537.36

访问控制请求标头:授权

接受:/

推荐人:http://localhost:3021/app.html

接受编码:gzip、deflate、sdch、br

接受语言:en-US,en;q=0.8,he;q=0.6

我做错了什么?

【问题讨论】:

你试过在 AJAX 请求语法中使用 headers 键吗??? @ShalinPatel 不,你是什么意思?可以举个例子吗? 点赞headers : "Authorization" : "Basic " + btoa('username' + ":" + 'password') 【参考方案1】:

这可能会解决您的问题。

$.ajax(
    type: 'GET',
    url: "https://subdomain.domain.com/login",
    headers : 
                "Authorization" : "Basic " + btoa('username' + ":" + 'password') 
    
)

【讨论】:

【参考方案2】:

问题是我试图让跨域请求做一个不允许 CORS 的服务器。

因此,我看到的请求是使用 OPTIONS 方法的预检请求。如果在这个预检请求中我得到了正确的响应 CORS 标头,我会在真实请求中看到我的 Authorization 标头。但是由于我没有通过 preflight OPTIONS 请求,所以我没有真正的请求,因此我没有看到 Authorization 标头。

我通过使用 Node.js 而不是浏览器使用 API 解决了这个问题。

【讨论】:

以上是关于未能添加 HTTP 标头的主要内容,如果未能解决你的问题,请参考以下文章

$http post 请求未添加指定的标头

Guzzle HTTP - 将授权标头直接添加到请求中

在 Angular 6 中添加 http 标头

在现有 WCF SOAP 服务中添加 Http 标头不起作用

如何在颤动的 Web http 请求中添加标头?

将标头添加到 http 请求