Eu tenho a seguinte função ajax personalizada que posta dados em um arquivo PHP. Sempre que ocorre a postagem de dados, recebo os dois erros a seguir:
Recusou-se a definir o cabeçalho inseguro "Comprimento do conteúdo"
Recusou-se a definir o cabeçalho inseguro "Conexão"
Código:
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);
}
O que estou fazendo de errado?
javascript
ajax
atirador de elite
fonte
fonte
Respostas:
Remova essas duas linhas:
XMLHttpRequest não tem permissão para definir esses cabeçalhos, eles estão sendo definidos automaticamente pelo navegador. A razão é que, ao manipular esses cabeçalhos, você pode enganar o servidor para que aceite uma segunda solicitação pela mesma conexão, uma que não passaria pelas verificações de segurança normais - isso seria uma vulnerabilidade de segurança no navegador.
fonte
Connection: close
causa? Se você sabe que uma solicitação demorará muito, deve ser possível solicitar que ela não bloqueie a conexão persistente. Os navegadores também não oferecem suporte ao pipelining de solicitação, portanto, se uma solicitação de longa execução vier antes de uma solicitação normal, ela bloqueará a segunda solicitação pelo tempo de manutenção de atividade completo. Se a solicitação de longa execução pudesse usar "Conexão: fechar", seria possível solicitar que ela não prendesse a conexão persistente e causasse (por exemplo) um atraso desnecessário de 5 segundos (onde 5 segundos é o tempo de manutenção).