这是一个我无法弄清楚的奇怪情况。
我正在我的网站上发布跨域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
!这是怎么回事?
答案 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?