Ошибка поста AJAX: отказался устанавливать небезопасный заголовок "Соединение"
У меня есть следующая пользовательская функция AJAX, которая отправляет данные обратно в файл PHP. Каждый раз, когда происходит передача данных, я получаю следующие две ошибки:
Отказался устанавливать небезопасный заголовок "Длина содержимого"
Отказался устанавливать небезопасный заголовок "Соединение"
Код:
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);
}
Что я делаю неправильно?
2 ответа
Удалите эти две строки:
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
XMLHttpRequest не разрешает устанавливать эти заголовки, они устанавливаются браузером автоматически. Причина заключается в том, что, манипулируя этими заголовками, вы можете обмануть сервер, чтобы он принял второй запрос через то же соединение, тот, который не прошел бы обычные проверки безопасности - это было бы уязвимостью безопасности в браузере.
В разделе 4.6.2 спецификации W3C XMLHttpRequest Level 1 перечислены заголовки, которые «управляются пользовательским агентом» и не могут быть установлены с помощью метода setRequestHeader (). И Connection, и Content-length находятся в этом списке.
Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
User-Agent
Via