2016-10-31 65 views
-2

为什么Request和Fetch返回不同的头文件?为什么请求和获取返回不同的头文件?

Response对象中的标题是否总是使用Fetch进行限制?尽管它在服务器上使用,各种使用的模式?

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

除了语言机制差异(Promise based,Callback等..等等)这两者有什么不同?为什么不返回一组丰富的标题,另一个是?

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政策对服务器,这样是不是一种选择..

编辑 即使在操作{模式:“无CORS”}头不充分。

+0

如果这是'node',那么''fetch'多边形填充是用于'node'的吗? – Jack

+1

为什么downvote?如果downvote,plz会帮助所有人并解释原因。谢谢.. –

+0

我没有downvote,但我认为这个问题有点奇怪......如果你真的需要'node'中的所有'headers',那么'fetch'几乎肯定是错误的选择......因为它是为浏览器设计,用于控制报头以确保安全。我能想到的唯一理由是,在节点中使用'fetch'是有意义的,如果你有通用应用程序并且需要在两个地方(客户端+服务器)运行相同的代码......但是如果你需要全部这些头文件然后不能这样。长话短说,你为什么在'node'中使用'fetch'? – Jack

回答

1

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

默认情况下做CORS请求时,只有这些头可供选择:

  • 的Cache-Control
  • 内容语言
  • 内容类型
  • 过期
  • 的Last-Modified
  • Pragma
+0

即使不在'{mode:'no-cors'}中操作,标题未满。 –

+0

@GN。那么'res.headers.raw()'怎么样? – Jack

0

fetch可能不是您想要的node,除非您有一个通用应用程序,并且需要相同的代码才能在客户端和服务器上运行。 fetch是为浏览器创建的,所以它至少会在浏览器中锁定你的头文件(请参阅我的其他答案),所以如果你的愿望是完全访问头文件,那么node特别适合。

相关问题