J'ai la fonction ajax personnalisée suivante qui publie des données dans un fichier PHP. Chaque fois que la publication de données se produit, j'obtiens les deux erreurs suivantes:
Refusé de définir un en-tête non sécurisé "Content-length"
Refusé de définir un en-tête non sécurisé "Connection"
Code:
function passposturl(url1, params, obj)
{
//url1 = url1+"&sid="+Math.random();
xmlHttp = get_xmlhttp_obj();
xmlHttp.loadflag = obj;
xmlHttp.open("POST", url1, true);
//alert(url1);
//alert(params);
//alert(obj);
//alert(params.length);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function ()
{
stateChanged(xmlHttp);
};
xmlHttp.send(params);
}
Qu'est-ce que je fais mal?
javascript
ajax
tireur d'élite
la source
la source
Réponses:
Supprimez ces deux lignes:
XMLHttpRequest n'est pas autorisé à définir ces en-têtes, ils sont définis automatiquement par le navigateur. La raison en est qu'en manipulant ces en-têtes, vous pourrez peut-être amener le serveur à accepter une deuxième requête via la même connexion, une qui ne passerait pas par les contrôles de sécurité habituels - ce serait une faille de sécurité dans le navigateur.
la source
Connection: close
cause? Si vous savez qu'une demande prendra du temps, il devrait être possible de demander qu'elle ne lie pas la connexion persistante. Les navigateurs ne prennent pas en charge le pipelining des demandes non plus, donc si une demande de longue durée vient avant une demande normale, elle bloquera la deuxième demande pendant toute la durée de conservation. Si la demande de longue durée pouvait utiliser "Connection: close", alors il serait possible de demander qu'elle ne lie pas la connexion persistante et provoque (par exemple) un retard inutile de 5 secondes (où 5 secondes est le temps de maintien en vie).