Ich versuche einfache xhr Abstraktion zu implementieren, und bekomme diese Warnung, wenn ich versuche, die Header für einen POST zu setzen. Ich denke, es könnte etwas mit dem Setzen der Header in einer separaten JS-Datei zu tun haben, denn wenn ich sie im <script>
Tag in der HTML-Datei gesetzt habe, hat es gut funktioniert. Die POST-Anfrage funktioniert gut, aber ich bekomme diese Warnung und bin neugierig warum. Ich erhalte diese Warnung sowohl für die Header als auch connection
, aber nur in WebKit-Browsern (Chrome 5 Beta und Safari 4). In Firefox erhalte ich keine Warnungen, der Content-Length-Header ist auf den richtigen Wert gesetzt, aber die Verbindung ist auf Keep-Alive statt auf Close eingestellt, was mich dazu bringt, meine setRequestHeader-Aufrufe zu ignorieren und zu generieren es ist eigen. Ich habe diesen Code im IE nicht ausprobiert. Hier ist der Auszeichnungs & Code:WebKit "Weigerte uns, unsafe header 'content-length'"
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;
}
Warum lässt WebKit dieses Header-Feld nicht setzen? – Gumbo
Ich glaube, ich hatte den Eindruck, dass es das Best Practices war, dieses Feld so zu setzen, dass es in allen Browsern konsistent war ... –
Es gibt Kopfzeilenfelder, die vom Client/Server besser automatisch gesetzt werden sollten. * Content-Length * ist einer von ihnen. – Gumbo