Отказался устанавливать небезопасный заголовок Connection/Content-length

Я работаю над веб-сайтом, и у меня есть проблема прямо здесь. На странице, над которой я работаю, пользователь указывает ip-адрес и порты, которые он хочет найти. Это делается с помощью ajax (сторона пользователя) и php (сторона сервера). Ajax отправляет ip и порт (по одному) в php файл, а он возвращает результат порта. Цель состоит в том, чтобы пользователь увидел, какой порт тестируется (в элементе div) в данный момент, и вот где проблема. Он хорошо запускается/работает, он тестирует все порты, которые хочет пользователь, но в период тестирования он не показывает ни одного порта, просто показывает конечный порт (после того, как все предыдущие порты были протестированы) и результат портов (если какой-то порт был результат), который появляется в отдельном элементе div. Это просто отлично работает в Firefox, в других браузерах происходит то, что я только что объяснил. Консоль Google Chrome говорит: «Отказано в установке небезопасного заголовка «Длина контента» и «Отказано в установке небезопасного заголовка» Соединение». Я искал эту проблему в течение нескольких дней, и я нашел так много вещей, и я пробовал их, но ни один из них не решил проблему.

Вот мой код.

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 источник


Ответы (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