【问题标题】:Refused to set unsafe header Connection/Content-length拒绝设置不安全的标头 Connection/Content-length
【发布时间】:2014-07-07 12:33:24
【问题描述】:

我正在开发一个网站,但我在这里遇到了问题。在我正在工作的页面上,用户输入了一个 IP 地址和他想要搜索的端口。这是使用 ajax(用户端)和 php(服务器端)制作的。 Ajax 将 ip 和端口(一一)发送到 php 文件,他返回端口的结果。目标是用户看到当前正在测试的端口是什么(在 div 元素中),这就是问题所在。他运行/工作良好,他测试了用户想要的所有端口,但在测试期间他没有显示端口,只显示最终端口(在测试所有先前的端口之后)和端口的结果(如果某些端口有一个结果),它出现在一个不同的 div 元素中。这在 Firefox 中完美运行,在其他浏览器中发生了我刚刚解释的情况。谷歌浏览器控制台说:拒绝设置不安全的标头“内容长度”和拒绝设置不安全的标头“连接”。这几天我一直在寻找这个问题,我发现了很多东西并尝试了它们,但没有一个能解决问题。

这是我的代码。

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;
}

另一件事真的很奇怪。你看到HttpRequest函数中注释的那些alert(params);了吗?如果我不加注释,它会显示正在测试的端口,但它会显示警报,我不希望这样。

【问题讨论】:

标签: ajax connection content-length


【解决方案1】:

如果没有 HTML,您的 jquery.js 应该可以处理这需要一些猜测(也许您可以发布相关的摘录(提示,提示))。我认为可能无法找到 $("p.porta") 或者附加的 HTML 以意想不到的方式做出反应。您应该尝试使用例如将结果打印到控制台console.log(即您正在使用 Firebug 或类似的工具)以查看您在什么时间得到了什么。也许你也会在客户端找到一些东西。

更新this question 及其接受的答案来看,Chrome 的行为实际上是您应该期待的。 standard for XMLHttpRequests 规定这两个标头不应由客户端设置,以避免请求走私攻击。您只是不应该设置它们(即使您的 PHP 源代码告诉您)。

【讨论】:

  • 我这样做了,我得到了结果。正如我之前所说,它可以工作,但不显示正在测试的端口。
  • 你确定你只是“太快”而无法被看到吗?也许您可以在下次尝试之前将其分解为一个函数和setTimeout
  • 速度不算太快,因为它在火狐上运行,并且需要1/2秒才能更改端口。
  • @mathiaz 你应该省略这两个标题,浏览器会设置它们。也许您可以在将响应包含到此脚本之前添加一个按钮来测试添加响应。
  • @mathiaz 你能把你的 JavaScript 和一些相关的 HTML 放到一个JSFiddle 中来演示一下效果吗?
猜你喜欢
  • 2023-02-24
  • 2017-01-22
  • 2013-05-06
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多