web-dev-qa-db-ja.com

ヘッダーと一緒にカスタムUser-Agent文字列を送信する(フェッチ)

Reactでfetch AP​​Iを使用していて、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を渡す方法に関する回避策がありますか?

10
a53-416

いくつかのテストの後、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 objectsheadersキーの下に含めます。

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

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