【问题标题】:Why does Request and Fetch return different headers?为什么 Request 和 Fetch 返回不同的标头?
【发布时间】: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


【解决方案1】:

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

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

  • 缓存控制
  • 内容-语言
  • 内容类型
  • 过期
  • 最后修改
  • 编译指示

【讨论】:

  • 即使不在{mode: 'no-cors'} 中操作,标题也未满。
  • @GN。 res.headers.raw() 怎么样?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 2017-04-15
    • 2016-03-21
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2018-04-13
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多