Вопрос: CORS + Basic Authentication не работает в большинстве браузеров

Лучший ответ: В общем, я склонен считать, что это баг в jQuery. Я написал код для CORS с Basic Auth «руками» без jQuery, он работает как минимум в Fx 10 и 17 и в Opera 12.10

Код следующий:
на клиенте — 

<!DOCTYPE html>
<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CORS testing</title>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
    document.getElementById("1").addEventListener("click", function() {
        var xhr = new XMLHttpRequest();
        xhr.onload = function(e) {
            document.getElementById("2").textContent = xhr.responseText;
        };
        xhr.open("GET", "http://dev.merlin-vrn.tk/cors/api.php", true);

//        xhr.withCredentials = true;
        xhr.setRequestHeader("Authorization", "Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk");

        xhr.send();
    }, false);
}, false);
</script>

</head><body>

<button id="1">Click me</button>
<div id="2"></div>

</body></html>



на севрере — 
<?php

if (isset($_SERVER['HTTP_ORIGIN']))
    header("Access-Control-Allow-Origin: $_SERVER[HTTP_ORIGIN]");

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {                                                                                                                        
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))                                                                                                        
        header("Access-Control-Allow-Methods: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_METHOD]");                                                                         
                                                                                                                                                                      
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))                                                                                                       
        header("Access-Control-Allow-Headers: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_HEADERS]");                                                                        
} else {                                                                                                                                                              
    header('WWW-Authenticate: Basic realm="API"');                                                                                                                    

    header("Content-Type: application/json");

    if (isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == "testuser" && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == "testpassword") {
        header('HTTP/1.1 200 OK');
        echo '{"result": "ok"}';
    } else {
        echo '{"result": "noauth"}';
    }
}

file_put_contents("api-log.txt", "$_SERVER[REQUEST_METHOD] $_SERVER[REQUEST_URI] $_SERVER[SERVER_PROTOCOL]\n", FILE_APPEND);
file_put_contents("api-log.txt", print_r($GLOBALS, true), FILE_APPEND);
file_put_contents("api-log.txt", "\n\n", FILE_APPEND);

?>



Логирование в конце этого скрипта — просто для удобства при тестировании. Живьём можно видеть здесь.

P.S. господа, подскажите хайлайтер для хабра, а?

Худший ответ: Для IE необходимо указать
$.support.cors = true;


Иначе работать не будет, по поводу Оперы ничего не скажу, ибо не пробовал.