Tengo la siguiente función ajax personalizada que envía datos a un archivo PHP. Cada vez que ocurre la publicación de datos, obtengo los siguientes dos errores:
Se negó a establecer un encabezado inseguro "Longitud de contenido" Se
negó a establecer un encabezado inseguro "Conexión"
Codigo:
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é estoy haciendo mal?
javascript
ajax
francotirador
fuente
fuente
Respuestas:
Elimina estas dos líneas:
XMLHttpRequest no tiene permitido configurar estos encabezados, el navegador los configura automáticamente. La razón es que al manipular estos encabezados, es posible que pueda engañar al servidor para que acepte una segunda solicitud a través de la misma conexión, una que no pasaría por las comprobaciones de seguridad habituales; eso sería una vulnerabilidad de seguridad en el navegador.
fuente
Connection: close
causa? Si sabe que una solicitud llevará mucho tiempo, debería ser posible solicitar que no interrumpa la conexión persistente. Los navegadores tampoco admiten la canalización de solicitudes, por lo que si una solicitud de ejecución prolongada se produce antes de una solicitud normal, bloqueará la segunda solicitud durante todo el tiempo de actividad. Si la solicitud de ejecución prolongada podría usar "Conexión: cerrar", entonces sería posible solicitar que no interrumpa la conexión persistente y cause (por ejemplo) un retraso innecesario de 5 segundos (donde 5 segundos es el tiempo de mantenimiento).