2012-06-25 18 views
8

私はHTTP基本認証を持つサーバーを持っており、上記のHTTPサーバーのユーザー名とパスワードを知っているクライアントスクリプトを持っています。私はXHRリクエストを使用しており、承認ヘッダーを設定するにはsetRequestHeaderです。このビットは、ブラウザがデフォルトのHTTPログインダイアログを表示しないようにします。ブラウザで生成されたリクエストにhttpヘッダーを設定しますか?

request.setRequestHeader('Authorization', authInfo); 

これはAJAXのためを要求しますが、場合には、私が言及したサーバーからファイルをダウンロードしたいと私はAJAXなしを行くと、ブラウザが要求自体を作成する場所、JavaScriptからwindow.location.hrefのようなものを使用するように強制しています正常です。このリクエストにはAuthorizationヘッダーが含まれていないので(ブラウザはログインダイアログを表示し、実際のサーバーのログイン情報のbase64を保存した後にのみ、リクエストごとにAuthorizationヘッダーが自動的に追加されます)、ブラウザはHTTPログインダイアログを表示します。

したがって、ヘッダーをに設定する方法はありません。非アヤックスリクエストはブラウザーで作成しましたか?

答えて

2

URLにユーザー名とパスワードを設定しようとしましたか?

location.href = 'http://user:[email protected]/path/to/download'; 

私はInternet Explorer 7+、残念ながら、除いてほとんどのブラウザで動作するはずだと思います。

また、サーバーにアクセスできる場合は、クッキーを使用して認証するサーバー側にスクリプトを置くこともできます。クッキーはJavaScriptで設定できます。

+0

[CSRF攻撃](http://en.wikipedia.org/wiki/Cross-site_request_forgery)の認証クッキーが悪用される可能性があることにご注意ください。 – user123444555621

+0

ありがとうございました。 残念ながら、私はサーバー側でスクリプトインタープリタを持っていないので、私は第二の方法はありません。 – ggat

+0

最初のアプローチに関するちょうど1つの注意点は、user:passwordなどのパスを渡す方法です(base64などでコード化されています)。 これは、たとえばbase64でエンコードされたユーザーとパスワードをURLに送信し、この文字列をサーバー側でデコードし、apacheで新しいURLをリダイレクトすることで実現できると思います。これはダウンロードユーザーであるため、ブラウザのアドレスバーにデコードされたURLは表示されません。 しかし、私はおそらくこれを行うネイティブな方法があるのか​​と尋ねています。 – ggat

関連する問題