AJAX 게시 오류 : 안전하지 않은 헤더 '연결'설정 거부


101

데이터를 다시 PHP 파일에 게시하는 다음과 같은 사용자 지정 ajax 함수가 있습니다. 데이터 게시가 발생할 때마다 다음 두 가지 오류가 발생합니다.

안전하지 않은 헤더 "Content-length"
설정 거부 안전하지 않은 헤더 "Connection"설정 거부

코드 :

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

내가 뭘 잘못하고 있죠?



안녕 조이. 나는 그것을 여기에 게시하기 전에 그것을 겪었다. 나는 아직도 그것을 얻지 못하고있다. 내가해야 할 일은 setRequestHeader 줄에 주석을 달기 만하면됩니까?
스나이퍼

답변:


166

다음 두 줄을 제거하십시오.

xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");

XMLHttpRequest는 이러한 헤더를 설정할 수 없으며 브라우저에 의해 자동으로 설정됩니다. 그 이유는 이러한 헤더를 조작함으로써 서버가 동일한 연결을 통해 두 번째 요청을 수락하도록 속일 수 있기 때문입니다. 일반적인 보안 검사를 거치지 않는 것은 브라우저의 보안 취약점입니다.


5
어떤 "취약점"이 Connection: close발생합니까? 당신이 요청 시간이 오래 걸릴 것 알고 있다면, 해야 는 영구 연결을 묶어하지 요청이 가능합니다. 브라우저는 요청 파이프 라이닝도 지원하지 않으므로 장기 실행 요청이 정상적인 요청보다 먼저 오면 전체 연결 유지 시간 동안 두 번째 요청을 차단합니다. 장기 실행 요청이 "Connection : close"를 사용할 수있는 경우 영구 연결을 묶지 않도록 요청하여 불필요한 5 초 지연 (예 : 5 초가 연결 유지 시간)을 유발할 수 있습니다.
doug65536

3
@ doug65536 : 브라우저는 헤더 값의 유효성을 검사하지 않으며 단순히 엉망이되어서는 안되는 헤더 설정을 허용하지 않습니다.
Wladimir Palant

안녕하세요 Wladimir, 그 두 줄이 제거되면 매개 변수를 어떻게 전달합니까?
coderInrRain

@anunixercoder : 당신은하지 않습니다. 이 두 헤더는 브라우저에 의해 자동으로 설정되며 변경할 수 없습니다.
Wladimir Palant

Re : "영구 연결을 묶지 않도록 요청할 수 있어야합니다." -그게 아니라 | 연결 : 닫기 | 않습니다.
EricLaw
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.