1

ajax 経由で別のサブドメインに POST リクエストを送信しようとしています。プリフライト リクエスト (OPTIONS) は成功しますが、次の XMLHttpRequest リクエストは「Origin http://app.example.com is not allowed by Access-Control-Allow-Origin.」を返します。

クライアント側 (app.example.com) のコードは次のようになります。

var settings = {
    url: 'http://api.example.com/auth',
    type: 'POST',
    contentType: 'application/json',
    crossDomain: true,
    headers: {"X-Requested-With": "XMLHttpRequest"},
    username: data.username,
    success: callback,
    error: callback
};

$.ajax(settings);

サーバー側のコード (api.example.com) は次のようになります。

$this->output->set_header('Content-Type: application/json; charset=utf-8');
$this->output->set_header('Access-Control-Allow-Origin: http://app.example.com');
$this->output->set_header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS');
$this->output->set_header('Access-Control-Allow-Headers: X-Requested-With, Origin, X-Csrftoken, Content-Type, Accept');
$this->output->set_header('Access-Control-Allow-Credentials: true');

OPTIONS リクエストは 200 ステータスを返します。誰かが私に欠けているものを教えてくれることを願っています。ありがとう!

4

1 に答える 1

1

次のいずれかを行う必要があります。

  1. ヘッダーを完全に削除しAccess-Control-Allow-Credentialsます (これにより、リクエストで Cookie が送信されなくなります)、または:
  2. ajax リクエストに以下を追加します。xhrFields: { withCredentials: true },

2 番目のオプションでは、リクエストに Cookie が含まれます。詳細については、こちらを参照してください:クロスドメインの投稿で資格情報を送信しますか?

クロスドメイン リクエストが機能していることを確認するためだけに、最初のオプションを最初に試してから、その後で Cookie を追加することをお勧めします (デバッグを容易にするため)。

于 2013-03-20T01:57:35.450 に答える