【发布时间】:2016-10-31 23:00:28
【问题描述】:
为什么 Request 和 Fetch 返回不同的标头?
Response 对象中的标头是否总是使用 Fetch 进行限制?尽管它在服务器上使用,但使用了各种模式?
Request 似乎返回了一组丰富的标头,而 Fetch 没有。
除了语言机制的差异(基于 Promise、Callback 等)之外,这两者有何不同?为什么一个不返回一组丰富的标头而另一个是?
两个示例中使用的fileURL 都是跨域的。在 Node/Express 服务器上,调用 Google CDN。
使用请求
https://github.com/request/request
request(fileURL, (err, res, body) => {
//headers in res
//are pretty rich
});
使用 Fetch
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'} 下运行,标头也未满..
【问题讨论】:
-
如果这是用于
node,那么您将哪个fetch用于node? -
为什么要投反对票?如果投反对票,请帮大家一个忙并解释原因。谢谢..
-
我没有投反对票,但我认为这个问题有点奇怪......如果你真的需要
node中的所有headers,那么fetch几乎肯定是错误的选择.. .因为它是为将控制标题以确保安全的浏览器而设计的。我能想到的唯一原因是,在节点中使用fetch是有意义的,如果你有通用应用程序并且相同的代码需要在两个地方(客户端+服务器)运行......但如果你需要所有那么这些标题不可能是这种情况。长话短说,你为什么在node中使用fetch? -
比较库之间的功能并不是那么奇怪。如果在这种情况下
fetch是错误的选择,也许这就是答案。 -
我没有说比较库之间的功能很奇怪。我说这个比较很奇怪,因为我所说的原因,这只是为了推测人们为什么会否决它。 SO的问题是,很多时候问题在某种程度上是错误的或有缺陷的......所以在回答问题之间存在冲突,正如我试图做的那样(在假设OP知道我们不知道的情况下操作) 't)... 或尝试为某事争取“正确”的方式,这往往比它的价值更麻烦。
标签: javascript node.js fetch node-request