2012-03-22 8 views
6

私は自作APIのために、承認ヘッダーを設定することで重大な問題を抱えています。Ajax Authorization Requestヘッダーが何度も失敗する

$.ajax({ 
    type: "GET", 
    url: url+"/Projects", 
    contentType: "application/json; charset=utf-8", 
    beforeSend: function (req) { 
     req.setRequestHeader("Authorization", AuthBuilder(username, password)); 
    }, 
    success: function (result) { 
     alert("success"); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert("fail"); 
    } 
}); 

まあ場合:

は、これは私のbeforeSendコードです(要求を検討するシオマネキを使用して)私は、AjaxリクエストのためのjQueryのを使用していますが、「beforeSend」は全く動作しません。あなたは何をしますか?

function GET(address, callback, error) { 
Request = getXMLHttpObject(); 
Request.open("GET", url + address, true); 

var base64 = Base64.encode(username + ":" + password); 
alert(base64); 
Request.setRequestHeader("Authorization", "Basic " + base64); 

Request.send(); 
Request.onreadystatechange = function() { 
    //alert(Request.readyState+" code "+Request.status); 
    if (Request.readyState == 4 && Request.status == 200) { 
     callback(jQuery.parseJSON(Request.responseText)); 
    } else if (Request.readyState == 4 && Request.status >= 400) { 
     error(Request.status, Request.statusText); 
    } 
} 
} 

は、私は事実を気にしないでください...だけでなく、これはこれは私の通常のコードです...どちらか

動作しないAJAXリクエストを送信するための古いやり方に戻りますサービスがjsonをデフォルトので返すので、特にjsonを要求しません。追加情報は

  • が起源は重要ではありませんが、サービスは、すべての起源は
  • 認可(他のクライアントでテスト)
  • のヘッダーで設定されたときに動作します(テストおよび確認されている)ことができます
  • 認証ヘッダはちょうど
  • AuthBuilder(ユーザ名、パスワード)を送信されません))getXMLHttpObject(基本認証ヘッダーの内容
  • の正しい形式を与えるだけで、いくつかのコピーですコードをペーストして前に作業しました

どのような考えですか?

答えて

1

私は問題が何かを見つけました。自己製作されたサービスは、これをグローバルヘッダとしてクライアントに送り返しました: "Content-Type"だけを含む "Access-Control-Allow-Headers"

この方法では、ユーザーエージェント(ブラウザ)を使用していないクライアントはこれらのヘッダーを無視し、とにかくヘッダーを送信しました。しかし、ブラウザは要求を最適化しようとし、「承認ヘッダーを受け入れないので、送信する前にカットします」と言った。この方法では、パッケージは小さく、サービスはそれをとにかく許可しません。(それは...)

サービスのAllow Access Allow Headers部分に「Authorization」を追加するだけで、Javascript/JQuery/Ajaxリクエストはリクエストヘッダを通常通り送信します!

関連する問題