发送自定义User-Agent字符串以及我的标题(获取)

时间:2017-03-15 16:09:29

标签: javascript http reactjs header fetch

我在React中使用fetch API,并且我从JSON端点下拉了一些数据。

作为我的请求的一部分,我想发送自定义User-Agent字符串。目前,当我检查我的请求时,UA字符串是:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

由于我在每个请求的标题中都有用,我想我只需将User-Agent附加到标题对象,就像它在various places在线说的那样:

fetch(url, {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    'User-Agent': 'MY-UA-STRING' // <---
})

但这不起作用。我有一种感觉,因为报告herehere以及here,fetch api中存在错误。

任何人都在努力解决如何使用headers作为fetch的一部分传递UA的问题?

1 个答案:

答案 0 :(得分:7)

经过一些测试后,Chrome确实存在User-Agent标题的错误。

这很可能是由于User-Agent标题不久前(2015年中)出现在不允许的标题列表中。

由于最近从不允许的标题列表中删除了此特定标题,因此Firefox(从版本43开始)将允许您在提取调用中更改用户代理,但Chrome不会。

这里是Firefox bugChromium bug

首先被禁止的原因是,使用User-Agent标头发送任意数据真的没有理由,它应该用于发送实际的User-Agent,并且像浏览XMLHttpRequest这样的浏览器请求真的没有理由欺骗用户代理。

当Chrome中修复错误时,任何人都会猜测,但它确实是一个错误,因为不允许的标头列表不再列出User-Agent标头,并且它应该在Fetch的options对象中指定时更改。 / p>

作为旁注,您通常应使用Headers Interface创建标题,并将其包含在headers键下的options objects

let headers = new Headers({
    "Accept"       : "application/json",
    "Content-Type" : "application/json",
    "User-Agent"   : "MY-UA-STRING"
});

fetch(url, {
    method  : 'GET', 
    headers : headers 
    // ... etc
}).then( ...