http - クロスドメイン - cors 読み方



どのようにXMLHttpRequestクロスドメインwithCredentials、HTTP認証(CORS)を作るのですか? (2)

認証ヘッダー(Firefoxでテスト)を使用してドメイン間のリクエストを行うことができません。 私は認証なしで作業しているリクエストを持っていますが、 withCredentialsをtrueに設定すると、もはやサーバからの応答を読み取ることができなくなります。

サーバー上で、これらのヘッダーを返送します(Flaskでafter_requestメソッドを使用)。

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設定されていないと、logステートメントはコンソールに予想される情報を記録します。 値を設定すると、xhrはアクセスを許可せず、0の値と空の文字列を書きます。 私はここで承認ヘッダーを設定していませんが、結果を読み取る能力には影響しません。

"open"コマンドにユーザ名/パスワードを追加しようとすると、 NS_ERROR_DOM_BAD_URI: Access to restricted URI deniedエラーが表示NS_ERROR_DOM_BAD_URI: Access to restricted URI deniedます。

私は間違って何をしていますか?


単純にサーバーを作成する方が簡単です

あなたがサーバーを制御しないときはどうですか? APIがいっぱいのこの世界では、他の誰かのサーバーと話をする可能性が非常に高いです。


私は完全なCORSの設定で記事書いた

この問題を引き起こす可能性のあるいくつかの問題が見つかりました。

  1. 資格情報が使用されている場合は、 Access-Control-Allow-Originをワイルドカードにすることはできません。 リクエストのOriginヘッダーをこのフィールドにコピーするのが最も簡単です。 標準がワイルドカードを許可しない理由は完全にはわかりません。
  2. Firefoxはキャッシュをクリアしても(おそらくセッション用)、Access-Controlの結果をキャッシュします。 再起動すると、新しいOPTIONSリクエストが実行されました。 デバッグを助けるために、私はヘッダーAccess-Control-Max-Age: 1を追加しましたAccess-Control-Max-Age: 1
  3. openコマンドのユーザー名/パスワードは、明らかにクレデンシャルとして使用できません。 Authorizationヘッダを自分で追加する必要があります。 xhr.setRequestHeader( 'Authorization', 'Basic ' + btoa( user + ':' + pass ) )

全体的に、 withCredentialsシステムはむしろ頭に浮かぶ。 要求の本文の一部として承認を受け入れるサーバーを書く方が簡単です。





cors