我在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' // <---
})
但这不起作用。我有一种感觉,因为报告here和here以及here,fetch api中存在错误。
任何人都在努力解决如何使用headers
作为fetch
的一部分传递UA的问题?
答案 0 :(得分:7)
经过一些测试后,Chrome确实存在User-Agent标题的错误。
这很可能是由于User-Agent标题不久前(2015年中)出现在不允许的标题列表中。
由于最近从不允许的标题列表中删除了此特定标题,因此Firefox(从版本43开始)将允许您在提取调用中更改用户代理,但Chrome不会。
首先被禁止的原因是,使用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( ...