3

ajax CORS リクエストで問題に直面しています。他のブラウザーでも動作するようになりましたが、Firefox は Authorization ヘッダーを送信しません。

対応するコードはこちら

$.ajax(
{
  type: "GET",
  url: 'http://www.urlhere.com/file.php',
  crossDomain: true,
  xhrFields: { withCredentials: true },
  headers: { 'Authorization': 'Basic .....' },
  error: function(data,error,errormsg) {
    $('#serverTestLog').html('<h3><span style="color: red">' 
      + error + '</h3></span><p>'+errormsg+'</p>');
    },
    success: function(data) {
      $('#serverTestLog').html('<h3><span style="color: green">success</h3>');
    }
  });

問題は、Chrome が実際に Authorization ヘッダーをリクエストと共に送信する唯一のブラウザーであることです。Firefoxで試してみると、ユーザー名とパスワードを求められ、その後、ヘッダーが正しく設定された新しいリクエストが開始されますが、ユーザーの操作なしでこれを行いたいです.

私も交換してみました

headers: { 'Authorization': 'Basic .....' },

usename: 'username',
password: 'password',        

ただし、リクエストで Authorization ヘッダーを送信するブラウザは Chrome だけです。今回は、Firefox はリクエストを次のように終了します。

NetworkError: 401 Authorization Required" というメッセージが表示され、ユーザー名とパスワードは要求されません。

どうすればこれを解決できるか考えている人はいますか?

4

1 に答える 1

0

リクエストを送信しているためwithCredentials、実際のリクエストの前にプリフライト リクエストが行われます。プリフライトリクエストには、CORS 仕様によるOPTIONSユーザー資格情報は含まれません。

そのOPTIONSリクエストは 401 で応答している可能性が高く、Firefox はそれを正しく報告しています。

ChromeWebKitには未解決のバグがありOPTIONS、401 が原因でリクエストが失敗した場合でも、プリフライト後の後続のリクエストがとにかく送信されます。

于 2013-04-01T19:57:48.990 に答える