1

HTTP 基本認証を使用する Web サービスに対してクロス オリジン リクエストを行うにはどうすればよいですか?

クライアントは jQuery で開発されており、RESTful/JSON Web サービスは変更されているため、「クロスオリジン」ヘッダーが返されます。

クライアントコード:

$.ajax({
    url: "http://localhost:3000/applications", // external service
    async: false,
    beforeSend: function (req) {
        req.setRequestHeader("Authorization", "Basic "+ base64_value)
    },
    success: function (applications) { $.each(applications, function(i, app) {
        list.push(app)
    })}
})

クライアント コードは、OPTIONS と GET リクエストの両方をトリガーします (Chrome の場合)。OPTIONS リクエストは 401 で失敗します。

GET リクエストにはどのヘッダーを使用する必要があり、OPTIONS リクエストにはどのヘッダーを使用する必要がありますか? また、GET および OPTIONS にはどのサーバー応答ヘッダーを使用する必要がありますか?

cURL とまったく同じ承認ヘッダーを使用してサービスにリクエストを行いましたが、これは機能しました (つまり、JavaScript コードと同じユーザー名/パスワード)。したがって、これはヘッダーと OPTIONS メソッドに関連していると思います。

4

1 に答える 1

0

これが可能だとは知りませんでしたが、読んだ後、実際にこれを行うことができます。コードのバグは、 beforeSend() で定義しているヘッダー値に起因します

ヘッダー名は正しいですが、値を作成する方法は次のとおりです (base64.js のような Base64 エンコーダーが必要です)。

var base64 = Base64.encode(ユーザー名 + ":" + パスワード)

そして、作成したとおりに jQuery ブロックを使用できます。

于 2012-08-21T06:25:20.343 に答える