javascript - JQuery CORS 和重定向

标签 javascript jquery ajax cors

使用 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 对象中获取重定向位置 header ,但它是空的。

我正在对来自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。

有谁知道使用 JQuery 需要什么?这是一个 JQuery 问题,还是所有 Ajax+CORS 请求的问题?

最佳答案

您不能将 Access-Control-Allow-Origin: *Access-Control-Allow-Credentials: true 结合使用。当Access-Control-Allow-Credentials设置为true时,Access-Control-Allow-Origin的值必须是Origin头的值:

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

或者,您可以删除 Access-Control-Allow-Credentials: true header (连同 withCredentials = true JS 代码)。

关于javascript - JQuery CORS 和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531515/

相关文章:

javascript - 在此示例中使用函数式编程的优势是什么?我用过 JavaScript

javascript - 更改滚动上的事件类

javascript - 没有 href、onclick 等的按钮

JavaScript 不是从外部链接加载的

javascript - AngularJS 中的自定义和标准多个过滤器

javascript - 拼写错误或缺少模块?

jquery - 优化 jQuery 代码

javascript - 在页面范围的 div 上检测滚动事件

javascript - 使用 JavaScript 创建 Firebase 动态链接

javascript - 使用 CasperJS 检查 AJAX 加载的 JS 对象/类?