为什么Request和Fetch返回不同的标题?

时间:2016-10-31 23:00:28

标签: javascript node.js fetch node-request

为什么Request和Fetch会返回不同的标头?

响应对象中的标头是否始终使用Fetch限制?尽管它在服务器上使用,但使用了各种模式?

请求似乎返回一组丰富的标头,而Fetch则没有。

除了语言机制差异(基于承诺,回调等等..)这两者有何不同?为什么一个人没有返回丰富的标题集,另一个是?

两个示例中使用的

fileURL都是跨域的。在Node / Express服务器上,将呼叫Google CDN。

使用请求
https://github.com/request/request

request(fileURL, (err, res, body) => {
  //headers in res
  //are pretty rich
});

使用抓取
https://github.com/matthew-andrews/isomorphic-fetch

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

const reqConfig = { method: 'POST',
                    headers: myHeaders,
                    body: data,
                    mode: 'cors', //or 'no-cors', or this field blank..
                    cache: 'default' };

fetch(fileURL, reqConfig).then(res => {
  //headers in res
  //are not very complete
})

//我无法访问服务器上的CORS策略,因此不能选择..

修改 即使以{mode:' no-cors'}操作,标题也不满......

2 个答案:

答案 0 :(得分:1)

由于您以cors模式运行,因此您请求的服务器必须white list the headers you can see

默认情况下,在执行CORS请求时,只有这些标头可用:

  • 缓存控制
  • 内容的语言
  • 内容类型
  • 到期
  • 上次修改
  • 附注

答案 1 :(得分:0)

fetch可能不是您想要的node,除非您有一个通用应用程序并且需要在客户端和服务器上运行相同的代码。 fetch是为浏览器创建的,因此它至少会在浏览器中锁定您的标题(请参阅我的其他答案),因此如果您希望完全访问标题,那么{{1最好的。