Отказано задаване на опасна заглавка Connection/Content-length

Работя върху уебсайт и имам проблем точно тук. На страницата, която работя, потребителят поставя ip адрес и портовете, които иска да бъдат търсени. Това се прави с ajax (от страна на потребителя) и php (от страна на сървъра). Ajax изпраща ip и порта (един по един) към php файла и той връща резултата от порта. Целта е потребителят да види кой порт се тества (в елемент div) в момента и тук е проблемът. Той работи/работи добре, тества всички портове, които потребителят иска, но по време на тестовия период не показва порт, показва само крайния порт (след като всички предишни портове са тествани) и резултата от портовете (ако има порт имаше резултат), който се появява в отделен div елемент. Това просто работи перфектно във Firefox, в други браузъри се случва това, което току-що обясних. Конзолата на Google Chrome казва: Отказано задаване на опасна заглавка „Content-length“ и Отказано задаване на опасна заглавка „Връзка“. Търсих този проблем от дни и намерих толкова много неща и ги опитах, но нито едно от тях не реши проблема.

Ето моят код.

jquery.js

function HttpRequest(endereco, portainicio)
{      
    var xmlhttp;
    var params = "endereco="+endereco+"&"+"porta="+portainicio;

    if (window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari
    {
        xmlhttp = new XMLHttpRequest();
    }

    else // IE6, IE5
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("POST", "/firewall/ajax", false);

    //alert(params);

    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");

    xmlhttp.send(params);
    return xmlhttp.responseText;
}

function ajaxfirewall()
{
    (...)

    var resposta;

    $("p.ip").append("<span class='end'> "+endereco+"</span>");       

    for (portainicio; portainicio <= portafinal; portainicio++)
    {   
        resposta = HttpRequest(endereco, portainicio);              
        $("p.porta").append(" <span class='tporta'>"+ resposta+"</span><br>");
    }

    return false;
}

Друго нещо е наистина странно. Виждате ли онези alert(params);, които са коментирани във функцията HttpRequest? Ако го оставя без коментар, той показва порта, който се тества, но показва предупреждението и аз не искам това.


person mathiaz    schedule 19.05.2014    source източник
comment
възможен дубликат на Грешка при публикуване на AJAX: Отказано е да зададете опасна заглавна връзка   -  person Wladimir Palant    schedule 03.12.2014


Отговори (1)


Без HTML вашият jquery.js би трябвало да работи върху това включва известни догадки (може би бихте могли да публикувате съответния откъс (подсказка, подсказка)). Смятам за възможно $("p.porta") да не може да бъде намерен или добавеният HTML да реагира по неочакван начин. Трябва да опитате просто да отпечатате резултатите си в конзолата, като използвате напр. console.log (т.е. използвате Firebug или нещо подобно), за да видите какво получавате по кое време. Може би ще намерите нещо и от страна на клиента.

Актуализация Съдейки по този въпрос и неговият приет отговор поведението на Chrome всъщност е това, което трябва да очаквате. стандартът за XMLHttpRequests предписва тези две заглавки да не се задават от клиента, за да се избегнат атаки за контрабанда на заявки. Просто не трябва да ги задавате (дори ако вашият PHP източник ви казва да го направите).

person Patru    schedule 19.05.2014
comment
Направих това и получавам резултатите. Както казах по-рано, работи, но не показва порта, който се тества. - person mathiaz; 21.05.2014
comment
Сигурен ли си, че не си твърде бърз, за ​​да те видят? Може би можете да го разложите във функция и setTimeout преди следващия си опит? - person Patru; 21.05.2014
comment
Не е много бързо, защото работи на Firefox и отнема 1/2 секунди, за да промените порта. - person mathiaz; 21.05.2014
comment
@mathiaz трябва да пропуснете двете заглавки, браузърът ще ги зададе. Може би можете да добавите бутон, за да тествате добавянето на отговорите, преди да го включите в този скрипт. - person Patru; 22.05.2014
comment
@mathiaz бихте ли поставили вашия JavaScript и някакъв подходящ HTML в JSFiddle, за да демонстрирате ефекта? - person Patru; 22.05.2014
comment
Моля, погледнете този: stackoverflow.com/questions/7210507/ - person hugsbrugs; 19.09.2015