AJAXポストエラー:安全でないヘッダー「接続」の設定が拒否されました


101

PHPファイルにデータをポストバックする次のカスタムajax関数があります。データのポストが発生するたびに、次の2つのエラーが発生します。

安全でないヘッダー「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

次の2行を削除します。

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

XMLHttpRequestでこれらのヘッダーを設定することはできません。これらはヘッダーによって自動的に設定されます。その理由は、これらのヘッダーを操作することで、サーバーをだまして、同じ接続を介して2番目のリクエストを受け入れるようにできる可能性があるためです。


5
「脆弱性」は何をConnection: close引き起こしますか?あなたは、要求が長い時間がかかるだろう知っていれば、する必要があり、それは永続的な接続を縛るないように要求することが可能に。ブラウザもリクエストのパイプライン処理をサポートしていないため、長時間実行されているリクエストが通常のリクエストの前に来ると、2番目のリクエストがブロックされ、キープアライブ時間全体が使用されます。長時間実行されるリクエストで「接続:クローズ」を使用できる場合は、永続的な接続を拘束せずに(たとえば)不必要な5秒の遅延(5秒はキープアライブ時間)を引き起こすことを要求できます。
doug65536

3
@ doug65536:ブラウザーはヘッダーの値を検証せず、単に、いじってはいけないヘッダーの設定を許可しません。
Wladimir Palant 2013

こんにちはWladimir、これらの2行が削除された場合にパラメーターを渡す方法
coderInrRain 2017

@anunixercoder:そうではありません。これらの2つのヘッダーはブラウザーによって自動的に設定され、変更できません。
Wladimir Palant 2017

再:「永続的な接続を拘束しないことを要求することが可能であるべきです。」-それは|接続ではありません|閉じる| します。
EricLaw
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.