JQuery 1.8.2 の使用
ある AppServer ( Front ) から別の AppServer ( Back ) サーバーに CORS リクエストをアプリに送信しています。Frontから次の Ajax 呼び出しを行うと、Backからの 302 応答 (セキュリティ チェック)は受け入れられますが、JSESSIONID Cookie は保存されません。
$.ajax({
url : url,
dataType : 'html',
success : function(data, status, xhr) {
$(dataContainer).append(data);
},
complete: function(xhr, status, error) {
if (xhr.status != 200) {
$.logger(xhr.getResponseHeader('Location'));
}
}
});
ここで、同じ呼び出しを行って withCredentials を追加すると、JSESSIONID は正しく保存されますが、302 リダイレクトがドロップされます。Chrome と Firefox の両方 (両方の最新バージョン) は、単にリクエストの処理を停止します。
$.ajax({
xhrFields: { withCredentials: true },
url : url,
dataType : 'html',
success : function(data, status, xhr) {
$(dataContainer).append(data);
},
complete: function(xhr, status, error) {
if (xhr.status != 200) {
$.logger(xhr.getResponseHeader('Location'));
}
}
});
xhr オブジェクトからリダイレクト ロケーション ヘッダーを取得しようとしましたが、空です。
Backから出てくるすべての応答に次のように設定しています。
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
response.setHeader("Access-Control-Max-Age", "1728000");
response.setHeader("Access-Control-Allow-Headers", "Cookie,X-Requested-With");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Expose-Headers", "Location");
明らかに、Origin を機能させることができる場合は、Origin を制限します。
これをJQueryで動作させるために何が必要か知っている人はいますか? JQuery の問題ですか、それともすべての Ajax+CORS リクエストで経験した問題ですか?