我试图在不使用反向代理的情况下解决CORS错误(这是不可能的,而且架构上的变化很大)。
我有以下ajax(对于目的地,已设置了正确的Access-Control-x
标头。
function showCORSContent(docUrl) {
if (docUrl != undefined && docUrl !== '') {
$.ajax({
headers: {
"Accept": "text/plain",
"Content-Type": "text/plain"
},
cache: false,
async: false,
type: "GET",
xhrFields: { withCredentials: true },
crossOrigin: true,
url: docUrl,
success: function(data) {
$('#dummyframe').html(data);
},
complete: function() {
console.log("done ajax");
return;
},
error: function(error) {
console.log("done ajax");
return;
}
});
}
return;
}
据我所知,这是一个Simple
请求,这意味着不应进行飞行前检查。当从父页面进行第一次调用时,ajax响应良好,并且可以看到内容已正确加载。但是当我尝试打第二个电话时-它会进行飞行前检查,并在此过程中进行重定向。从MDN,我了解的是在请求不简单时执行飞行前检查。我不确定问题出在哪里,因为在第二次通话中它总是会出错。当前工作流的设置方式如下:
1)页面加载,并向另一个子网站进行ajax CORS调用。 2)内容已加载。 3)现在,用户尝试单击父网站上的某些内容-这应该对子网站进行类似的ajax调用以加载其他内容-这是失败的地方。
更新
我看到的是连续请求失败,因为浏览器未发送SESSION cookie。即使会话cookie绑定到该特定实例(例如www.one.site.com
,而不是*.site.com
),我仍希望cookie是在该父页面的连续请求中发送的。我确实设置了所有凭证标头和AJAX字段,那么为什么这样做呢?我需要回调来保存Cookie吗?