jQuery跨域AJAX请求在一个页面上工作,但不在另一个页面上

时间:2015-04-15 05:56:26

标签: javascript php jquery ajax cookies

这是一个我无法弄清楚的奇怪情况。

我正在我的网站上发布跨域AJAX请求,从http域到https域。我是通过两个不同页面上的按钮来做到这一点的。在一个页面上,请求正常,我可以从Firebug看到我的会话cookie正确地发送到服务器。在另一页上 - 在相同的域和URL结构下 - 不发送cookie。

E.g。在http://www.example.com/en/apples工作 但是没有在http://www.example.com/en/oranges

工作

代码如下:

var ajaxUrl = "https://www.example.com/en/controller/add/bananas/";

jQuery.ajax({
    type: "GET",
    url: ajaxUrl,
    xhrFields: {
         withCredentials: true
    },
    crossDomain: true,
    success: function(data) {
      console.log("Yay");
    }
  }
);

我的https网站回复:

Header add Access-Control-Allow-Origin      "http://www.example.com"
Header add Access-Control-Allow-Credentials "true"

我知道它有效,因为它适用于/apples,但完全相同的代码不适用于/oranges!这是怎么回事?

1 个答案:

答案 0 :(得分:1)

仍然不确定为什么它在一个页面而不是另一个页面上工作,但我通过Apache的conf.d文件向HTTPS服务器添加更多标题来修复它:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin      "http://www.example.com"
    Header add Access-Control-Allow-Credentials "true"
    Header add Access-Control-Allow-Methods     "GET, POST"
    Header add Access-Control-Allow-Headers     "Content-Type, Authorization, X-Requested-With"
    Header add Access-Control-Max-Age           "1000"
</IfModule>

这两个页​​面现在都可以使用。

同时检查:
Why is jquery's .ajax() method not sending my session cookie?
How do I send a cross-domain POST request via JavaScript?