47 votes

WebKit "a Refusé d'dangereuses en-tête "content-length'"

Je suis en train de mettre en œuvre simple xhr l'abstraction, et j'obtiens de cet avertissement lorsque vous essayez de définir les en-têtes d'un message. Je pense qu'il pourrait avoir quelque chose à voir avec la définition des en-têtes dans un autre fichier js, parce que lorsque j'ai mis dans l' <script> balise dans la .fichier html, il a bien fonctionné. La requête POST fonctionne bien, mais j'ai cet avertissement, et je suis curieux de savoir pourquoi. Je reçois cet avertissement pour les deux content-length et connection - têtes, mais uniquement dans les navigateurs WebKit (Chrome 5 bêta de Safari 4). Dans Firefox, je n'ai pas toutes les mises en garde, le Contenu de l'en-tête de Longueur est définie sur la valeur correcte, mais la Connexion est configurée pour les garder en vie au lieu de la fermer, ce qui me fait penser qu'il est aussi ignorant mon setRequestHeader appels et de générer son propre. Je n'ai pas essayé ce code dans IE. Voici le balisage & de code:

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;
}

64voto

bobince Points 270740

il est aussi ignorant mon setRequestHeader appels et de la génération de sa propre

Oui, la norme dit qu'il faut:

Pour des raisons de sécurité, ces étapes doivent être résilié si l'en-tête est [...]

  • Connexion
  • Content-Length

Déconner avec ceux qui pourraient exposer les diverses demande de la contrebande d' attaques, de sorte que le navigateur utilise toujours ses propres valeurs. Il n'y a pas de besoin ni de raison d'essayer de définir la durée de la demande, comme le navigateur, vous pouvez le faire avec précision à partir de la longueur des données que vous lui transmettez send().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X