【问题标题】:Authorization header not being sent when using fetch使用 fetch 时未发送授权标头
【发布时间】:2022-03-15 17:49:47
【问题描述】:

当我尝试将 Authorzation 标头设置如下时,标头不会发送到服务器以获取请求。使用 fetch 设置 Authorization 标头的正确方法是什么?

let options = { 
  method: 'GET', 
  headers: new Headers({ 
    Authorization: 'Bearer ...' 
  }) 
};
fetch('/api/somedata', options).then(function(response) { console.log(response); };

编辑

在网络选项卡上的 chrome 开发人员工具中,我得到了这个请求:

GET /api/somedata HTTP/1.1
Host: someserver.azurewebsites.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Accept: */*
Referer: http://localhost:3000/somedata
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

请注意,没有设置授权标头。

服务器响应:

HTTP/1.1 401 Unauthorized
Content-Length: 61
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
WWW-Authenticate: Bearer
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Date: Thu, 29 Sep 2016 03:16:15 GMT

【问题讨论】:

  • 我无法重现您的问题;我使用与您发布的相同代码进行了测试,Authorization 标头确实已发送到服务器...
  • Authorization 标头没有出现在forbidden header names 的列表中,所以它没有理由不工作。您确定发送的请求没有 Authorization 标头吗?如果您使用的是 Chrome 或 Firefox,您可以通过按 F12 打开开发者控制台并在“网络”选项卡下找到您的获取请求来查看请求标头。如果它在那里,则可能是服务器端有问题。
  • 是的,我确定它没有设置授权标头。
  • 是 CORS 请求吗?
  • 是的,一个 cors 请求。服务器响应 Access-Control-Allow-Origin: * 当我使用soapui时的重复标头,并且在邮递员中也不起作用。所以很可能是服务器。这很令人困惑,因为我不明白为什么 fetch 不发送标头?

标签: javascript promise fetch-api


【解决方案1】:

我相信您的服务器需要包含以下响应标头:

Access-Control-Allow-Headers: Authorization

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
相关资源
最近更新 更多