考虑以下情况:
从浏览器访问简单页面(http://firstdomain.com/test.html)。
该页面包含一个按钮,单击该按钮(httpsTest())将ajax请求发送到另一个域和不同协议(https://seconddomain.com/picture.png)的页面。
var createCORSRequest = function(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.withCredentials = true;
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// IE8 & IE9
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// CORS not supported.
xhr = null;
}
return xhr;
};
function httpsTest() {
var url = 'https://user:password@seconddomain.com/picture.png';
var method = 'GET';
var xhr = createCORSRequest(method, url);
if (xhr) {
xhr.onload = function() {
alert('Nice job');
};
xhr.onerror = function() {
alert('Something went wrong!');
};
xhr.send();
}
}
以上在Chrome中效果很好(第32节),但在FF(第26节 - 最新版本)中失败并出现错误:
NS_ERROR_DOM_BAD_URI:访问受限制的URI被拒绝
请注意:
1.我使用带有OpenSSL配置的Apache 2.2生成了第二个域的自签名证书
2.激活基本认证
3.在Apache配置中添加了以下CORS响应头:
Header set Access-Control-Allow-Origin "http://firstdomain.com"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "*"
Header set Access-Control-Max-Age "3600"
Header set Access-Control-Allow-Credentials "true"
是否还有其他人遇到此问题?
感谢。