自定义标头未添加到请求对象

我正在尝试使用 fetch api.

I'm trying to use fetch api.

首先我创建一个 new Headers() 对象:

First i create a new Headers() object:

var oHeaders = new Headers({
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    "X-DocuSign-Authentication": '{"Username":"xxx","Password":"xxx","IntegratorKey":"xxx"}'
})

如果我尝试记录标题,则在实例化标题后一切都正确.

After headers is instantiated if i try to log headers everything is correct.

oHeaders.forEach(function(v){console.log(v)})
//logs: 2 application/json {"Username":"xxx","Password":"xxx","IntegratorKey":"xxx"}

我创建了 Request 对象:

the i create the Request object:

var oReq = new Request('https://eu.docusign.net/restapi/v2/login_information', {
  method: 'GET',
  headers: oHeaders,
  mode: 'no-cors',
});

如果我尝试记录请求对象的标头,则只有 accept 标头会在那里.

If i try to log the headers of the request object only the accept header will be there.

oReq.headers.forEach(function(v){console.log(v)})
//logs: application/json

如果我尝试 fetch(oReq) 我得到 401 未授权 响应.

If i try to fetch(oReq) i get 401 unauthorized response.

是什么让标题消失了?

推荐答案

当您为请求设置 mode: 'no-cors' 时,浏览器将不允许您设置任何其他请求标头比 CORS-safelisted request-header.请参阅规范要求:

When you set mode: 'no-cors'for a request, browsers won’t allow you to set any request headers other than CORS-safelisted request-headers. See the spec requirements:

将名称/值 (name/value) 对附加到 Headers 对象 (headers),运行以下步骤:

To append a name/value (name/value) pair to a Headers object (headers), run these steps:

  1. 否则,如果 guard 是 "request-no-cors" 并且 name/value 不是CORS-safelisted request-header,返回.
  1. Otherwise, if guard is "request-no-cors" and name/value is not a CORS-safelisted request-header, return.

在该算法中,return 等同于在不将该标头添加到 Headers 对象的情况下返回".

In that algorithm, return equates to "return without adding that header to the Headers object".

相关文章