我有两台服务器(在我的控制之下)并执行从domain_a到domain_b的AJAX请求。跨域AJAX请求按预期工作,因为domain_b将Access-Control-Allow-Origin: *
(*
仅用于测试目的)放入HTTP响应头中。 HTTP方法是GET。
现在我想在domain_b上访问受htaccess保护的URI。我使用完全相同的代码进行一次修改:我在XMLHttpRequest.open()
方法中使用第4和第5个参数(用户名和密码),但在Firefox中我在控制台中出现以下错误:
NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
让我好奇的是,即使我在domain_b上使用未受保护的URI(在不发送用户名和密码时也能正常工作!)我在控制台中遇到同样的错误。完全相同的代码和相同的URI都可以工作 - 但是如果使用第四和第五个参数,浏览器似乎甚至没有发送请求(我认为) - 尽管server_b仍然以Access-Control-Allow-Origin: *
回答。
示例代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AJAX HTTP Auth Test</title>
<script>
var uri = "http://user25163.hol.es/";
//var uri = "http://user25163.hol.es/protected/";
function foo()
{
// Initialize the Http request.
var xhr = new XMLHttpRequest();
//xhr.open("GET", uri, true); // works
xhr.open("GET", uri, true, 'testuser', 'letmein'); // nope
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(this.responseText);
}
};
xhr.send();
}
</script>
</head>
<body>
<button type="button" onclick="foo();">Send AJAX request</button><br>
</body>
</html>
即使对于相同的目标URI(不受保护)也是如此。第一个xhr.open(...)
行有效,但第二个用户名+密码则没有。与SSL / TLS URI相同。
这是CORS规则中的附加保护或例外吗?或者我做错了什么?
请不要jQuery。并且请仔细阅读我在撰写通用内容之前所要求的内容,例如“AJAX不可能用于跨站点”(除非在HTTP请求标头中发送HTTP Auth凭据时实际上不可能 - 然后它是确定)。
编辑:使用Chrome测试 - 似乎有效(我得到了回复)。 Okidoki ......这似乎并不一致。