web-dev-qa-db-ja.com

フェッチAPI:Chromeでリクエストヘッダーに承認を追加できません

Chromeバージョン:57.0.2987

実際、古いChromeバージョンでは、この問題も発生します。アクセストークンを使用してリクエストヘッダーにAuthorizationを追加しました。

fetch('https://example.com/endpoint', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + accesstoken
  }  
})

私は常にAccess-Control-Allow-Headers:authorization onResponse Headerin Chromeさらに、私のフェッチは常にRequestメソッドです:[〜#〜] options [〜#〜](GETは表示されません)、ChromeではStatus Codeは200OKです

しかし、Firefox(バージョン52.0.1)で同じフェッチコードを実行すると、すべてがうまく機能します。 リクエストヘッダーAuthorizationを正しく追加できます。 Firefoxの応答ヘッダーAccess-Control-Allow-Headers:authorizationは表示されません。 RequestヘッダーにAuthorization: Bearer accesstokenが表示されます。

サーバー側は、リクエストヘッダーのCORSをすでに処理しています。

これはChromeバグまたは私のコード障害ですか?リクエストヘッダーAuthorizationを作成するにはどうすればよいですか? -)Chromeで正しく?

下の画像は、Chrome開発ツールの詳細Networkです: Below image is the detail Network in Chrome dev tool:

以下の画像は、Firefox開発ツールの詳細Networkです: enter image description here

7
Seven Lee

@stackdaveが言ったように、クロスドメインajaxの場合、ブラウザーはGETリクエストの前にOPTIONSリクエストを送信します。その後、ブラウザはサーバーの応答を待ちます。サーバーが応答しなかったので、ブラウザはOPTIONSステータスを停止するだけです。サーバーはこの問題を処理する必要があります。これはまだCORSの問題であり、APIのバグや問題をフェッチするものではありません。

0
Seven Lee

ブラウザは、認証トークンなしでOPTIONSリクエストの前に送信し、次に実際のリクエストを送信します

http://www.w3.org/TR/cors/ 参照 http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http- binding-made-easy / もう少し詳しい情報

0
stackdave