WebKit "Se negó a configurar el encabezado inseguro 'content-length'"

Estoy tratando de implementar una simple abstracción xhr, y recibo esta advertencia cuando intento configurar los encabezados para una POST. Creo que podría tener algo que ver con configurar los encabezados en un archivo js separado, porque cuando los configuro en el<script> etiqueta en el archivo .html, funcionó bien. La solicitud POST funciona bien, pero recibo esta advertencia y tengo curiosidad por qué. Recibo esta advertencia para amboscontent-length yconnection encabezados, pero solo en los navegadores WebKit (Chrome 5 beta y Safari 4). En Firefox, no recibo ninguna advertencia, el encabezado Content-Length se establece en el valor correcto, pero la conexión se establece en keep-alive en lugar de close, lo que me hace pensar que también está ignorando mis llamadas setRequestHeader y generando su propio. No he probado este código en IE. Aquí está el marcado y el código:

test.html:

<!DOCTYPE html>
<html>
    <head>
        <script src="jsfile.js"></script>
        <script>
            var request = new Xhr('POST', 'script.php', true, 'data=somedata',  function(data) { 
                console.log(data.text); 
            });
        </script>
    </head>
    <body>
    </body>
</html>

jsfile.js:

function Xhr(method, url, async, data, callback) {
    var x;
    if(window.XMLHttpRequest) {
        x = new XMLHttpRequest();

        x.open(method, url, async);

        x.onreadystatechange = function() {
            if(x.readyState === 4) {
                if(x.status === 200) {
                    var data = {
                        text: x.responseText,
                        xml: x.responseXML
                    };
                    callback.call(this, data);
                }
            }
        }

        if(method.toLowerCase() === "post") {
            x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            x.setRequestHeader("Content-Length", data.length);
            x.setRequestHeader("Connection", "close");
        }

        x.send(data);
    } else {
        // ... implement IE code here ...
    }
    return x;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta