1

Cookie を使用してクロス オリジン リソース共有を行う際に問題が発生しています。これが私のセットアップです:

クライアント:

    $.ajax({
        type: 'POST',
        url: '/processReq',
        data: params,
        xhrFields: {withCredentials:true},
        crossDomain: true,
        success: ...
    });

ブラウザでクライアントをデバッグし、XMLHttpRequest.withCredentials が実際に true であることを確認しました。

サーバ:

次のヘッダーを設定しています。

res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', '*');

私の問題は、セッション Cookie をブラウザーに保存して、その後の要求でサーバーに送信することができないことです。

ブラウザの応答ヘッダーは次のとおりです。

{
    "server": "nginx/1.2.6",
    "date": "Fri, 01 Feb 2013 23:46:07 GMT",
    "content-type": "application/json; charset=utf-8",
    "content-length": "306",
    "connection": "keep-alive",
    "x-powered-by": "Express",
    "access-control-allow-credentials": "true",
    "access-control-allow-origin": "*",
    "set-cookie": [
        "id=s%3Azm1m...NXe4Lkr9rLw; Domain=api.mydomain.io; Path=/; Expires=Sat, 01 Feb 2014 23:46:07 GMT; HttpOnly"
    ]
}

テストするたびに、サーバーに Cookie が送信されません。何か不足していますか?どんな助けでも大歓迎です。

4

2 に答える 2

1

('Access-Control-Allow-Origin', '*')とは併用できません('Access-Control-Allow-Credentials', true)。を明示的Access-Control-Allow-Originに 1 つの値に設定する必要があります。originそれでも「*」の動作が必要な場合は、プログラムでリクエスト ヘッダーに値を設定します。

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_controlから:

重要な注意: 資格証明付きのリクエストに応答する場合、サーバーはドメインを指定する必要があり、ワイルドカードは使用できません。

于 2013-02-01T23:55:49.670 に答える
0

CORSを完全に回避するもう1つのエレガントなオプションは、非表示のiframeとを使用することwindow.postMessageです。

APIは、postMessage2つのブラウザフレームがクロスドメインで通信できるようにします。基本的な設計は次のとおりです。

  1. メインページをロードdomain-1.com
  2. メインページは非表示のiframeをからロードしますdomain-2.com
  3. 非表示のiframeはJavaScriptをロードしてdomain-2.comAPIとインターフェースします

メインページがクロスドメインで話したいときはいつでも、非表示のiframeを介してリクエストをプロキシします。対処するCORSはありません—ありません!

いくつかのチュートリアル:

于 2013-02-02T07:16:54.797 に答える