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
を追加するだけだと考えました。これは variousplaces online:
fetch(url, {
Accept: 'application/json',
'Content-Type': 'application/json',
'User-Agent': 'MY-UA-STRING' // <---
})
しかし、これは機能しません。報告された here および here および here のように、それはフェッチAPIのバグによるものだと感じています。
誰でもheaders
を使用してfetch
の一部としてUAを渡す方法に関する回避策がありますか?
いくつかのテストの後、Chromeには確かにUser-Agentヘッダーにバグがあります。
これは、User-Agentヘッダーが許可されていないヘッダーのリストに含まれているのは、それほど前ではないためです(2015年中頃)。
この特定のヘッダーは許可されていないヘッダーのリストから最近削除されたため、Firefox(バージョン43以降)では、フェッチ呼び出しでUser-Agentを変更できますが、Chromeはできません。
Firefoxのバグ と Chromiumのバグ を以下に示します。
そもそも許可されなかった理由は、User-Agentヘッダーを使用して任意のデータを送信する正当な理由がないためです。実際のUser-Agentや、Fetch of XMLHttpRequestなどのブラウザー内リクエストを送信するために使用する必要があります。とにかくユーザーエージェントを偽装する正当な理由がないはずです。
バグがChrome=で修正される時期はだれでも推測できますが、許可されていないヘッダーのリストにUser-Agentヘッダーがリストされなくなったため、バグです。 Fetchのオプションオブジェクト。
補足として、通常は Headers Interface を使用してヘッダーを作成し、それらを options objects のheaders
キーの下に含めます。
let headers = new Headers({
"Accept" : "application/json",
"Content-Type" : "application/json",
"User-Agent" : "MY-UA-STRING"
});
fetch(url, {
method : 'GET',
headers : headers
// ... etc
}).then( ...