AJAX发布错误:拒绝设置不安全标头"连接"

sni*_*per 94 javascript 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);
 }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Wla*_*ant 157

删除这两行:

xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
Run Code Online (Sandbox Code Playgroud)

XMLHttpRequest不允许设置这些标头,它们由浏览器自动设置.原因是通过操纵这些头文件,您可能会欺骗服务器通过相同的连接接受第二个请求,这个连接不会通过通常的安全检查 - 这将是浏览器中的安全漏洞.

  • "连接:关闭"导致什么"漏洞"?如果您知道某个请求需要很长时间,那么*应该*可以请求它不会占用持久连接.浏览器也不支持请求流水线操作,因此如果长时间运行的请求出现在正常请求之前,那么它将阻止第二个请求完全保持活动时间.如果长时间运行的请求可以使用"连接:关闭",则可以请求它不占用持久连接并导致(例如)不必要的5秒延迟(其中5秒是保持活动时间). (5认同)
  • @ doug65536:浏览器不验证标头值,它们只是禁止设置您不应该弄乱的标头. (3认同)