Authorizationヘッダーを使用してクロスドメインリクエストを作成できません(Firefoxでテスト)。認証なしで機能するリクエストがありますが、withCredentials
をtrueに設定すると、サーバーからの応答を読み取ることができなくなります。
サーバー上でこれらのヘッダーを送り返します(after_request
Flaskのメソッド):
resp.headers['Access-Control-Allow-Origin'] = '*'
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
resp.headers['Access-Control-Allow-Headers'] = 'Authorization'
FirefoxでOPTIONS呼び出しが実際に行われることはありません。クライアントで、XMLHttpRequest呼び出しを行います。
var xhr = new XMLHttpRequest()
xhr.open( 'POST', 'http://test.local:8002/test/upload', true)
xhr.withCredentials = true
xhr.onreadystatechange = function() {
console.log( xhr.status, xhr.statusText )
}
xhr.send(fd)
withCredentials
が設定されていない場合、ログステートメントは期待される情報をコンソールに記録します。ただし、値を設定するとxhrはアクセスを許可せず、値0と空の文字列を書き込むだけです。ここでは認証ヘッダーを設定していませんが、結果を読み取る能力に影響はありません。
「open」コマンドにユーザー名/パスワードを追加しようとすると、NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
エラー。
私は何を間違えていますか?
私は 記事を書いた 完全なCORSセットアップを使用しました。
この問題を引き起こす可能性のある問題をいくつか見つけました。
Access-Control-Allow-Origin
_をワイルドカードにすることはできません。リクエストのOrigin
ヘッダーをこのフィールドにコピーするのが最も簡単です。標準がワイルドカードを許可しない理由は完全に不明です。OPTIONS
要求が強制的に実行されました。デバッグを支援するために、ヘッダー_Access-Control-Max-Age: 1
_を追加しましたopen
コマンドのユーザー名/パスワードは、明らかに資格情報として使用できません。 Authorization
ヘッダーを自分で追加する必要があります。 xhr.setRequestHeader( 'Authorization', 'Basic ' + btoa( user + ':' + pass ) )
全体的にwithCredentials
システムはかなり頭が悪いです。リクエストの本文の一部として承認を受け入れるサーバーを記述する方が簡単です。