自定义标头未添加到Request对象

时间:2017-02-28 10:35:26

标签: request cors http-headers fetch fetch-api

我试图使用fetch api。

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

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

如果我尝试记录标题,那么在实例化标题后,一切都是正确的。

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

我创建了Request对象:

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

如果我尝试记录请求对象的标题,那么只有accept标题。

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

如果我尝试fetch(oReq)我得到401 unauthorized回复。

标题消失的原因是什么?

1 个答案:

答案 0 :(得分:2)

为请求设置mode: 'no-cors'时,浏览器不允许您设置CORS-safelisted request-headers以外的任何请求标头。见the spec requirements

  

要将名称/值(名称 / )对附加到Headers对象(标题),请运行这些步骤进行:

     
      
  1. 否则,如果 guard 为“request-no-cors”且名称 / 不是CORS-safelisted request-header,则返回
  2.   

在该算法中,return等同于“返回而不将该标题添加到Headers对象”。