web-dev-qa-db-ja.com

基本認証ヘッダーをXMLHTTPREQUESTに割り当てる方法

プリフライトとCORSの多くの回答を読みましたので、読んでおくべき内容を参照するリンクを投稿しないでください。回答の多くはサーバーの観点からのものですが、この場合は私がクライアントです。 Originヘッダーを設定しますか?私の前提は、これは単純なリクエストであるということです。

 req.open("POST", url, true);
 req.setRequestHeader( 'Content-Type',   'application/blahblah' );
 req.setRequestHeader( 'Accept', 'application/blahblah' );
 req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass)); 
 req.send();

それでも、まだ動作していません、私のエラー:

プリフライトリクエストへの応答がアクセス制御チェックに合格しません。リクエストされたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、Origin 'null'はアクセスを許可されません。応答のHTTPステータスコードは500です。

14
carrots

溶液:

req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );
8
carrots

認証ヘッダーを設定する場合

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);
17
epascarello

この投稿は古いですが、出くわした他の人に答えています。

認証ヘッダーに問題はありません。あなたが直面している問題はCORSに関連しています。

Originヘッダーを自分で設定することはありません。ブラウザがそれを行います。 Originがnullの場合、file:///ではなくhttp://からコードを実行しているためだと思われます。

5
skinnysoftware

APIリクエストにこれを使用する場合、Authorizationヘッダーを追加すると、最初にXMLHttpRequestがOPTIONSリクエストを送信します。これは一部のAPIによって拒否される場合があります。

これを回避するには、次のこともできます。

var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;

これにより、Authorizationヘッダーが追加され、プリフライトリクエストも回避されます。

4
Nick Spicer