2011-08-26 12 views
73

データをPHPファイルにポストバックする次のカスタムajax関数があります。毎回データのポストは、私は、次の2つのエラーを取得起こる:AJAX post error:安全でないヘッダー "Connection"の設定を拒否しました

は、安全でないヘッダの「Content-Length」を設定することを拒否
危険なヘッダを設定することを拒否、「接続」

コード:

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

私は間違っていますか?

+2

参照:http://stackoverflow.com/questions/2623963/webkit-refused-to-set-unsafe-header-content-length – Joe

+0

Hey Joey。私はそれをここに投稿する前にそれを通過しました。私はまだそれを得ていない。私がしなければならないのは、setRequestHeader行をコメントすることだけです。 – sniper

答えて

125

削除の2行:

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

のXMLHttpRequestは、これらのヘッダを設定することが許可されていないが、彼らは、ブラウザによって自動的に設定されています。その理由は、これらのヘッダーを操作することで、サーバーが通常のセキュリティチェックを経ない同じ接続を介して2番目の要求を受け入れるようになる可能性があるからです。これはブラウザのセキュリティ上の脆弱性につながります。

+4

「脆弱性」とはどのようなものですか?リクエストに長い時間がかかることがわかっている場合、永続的な接続を縛らないように要求することができます。ブラウザーは要求パイプライニングもサポートしていないので、長時間実行されている要求が通常の要求の前に来ると、完全なキープアライブ時間の2番目の要求がブロックされます。長時間実行している要求が "Connection:close"を使用できる場合、永続的な接続を縛らず、不要な5秒遅延(5秒がキープアライブ時間)を引き起こすことを要求することが可能です。 – doug65536

+2

@ doug65536:ブラウザはヘッダー値を検証しません。単純に混乱させてはいけないヘッダーの設定を禁止します。 –

+0

こんにちはウラジミール、私はそれらの2行が削除されたら私のパラメータを渡す? – anunixercoder

関連する問題