使用AJAX跨站点进行HTTP身份验证

时间:2016-11-18 05:08:47

标签: javascript ajax .htaccess

我有两台服务器(在我的控制之下)并执行从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 ......这似乎并不一致。

0 个答案:

没有答案