2011-11-15 4 views
3

それはここに私の最初のポスト/スレッドだ、私は率直に言って、私はそれを必要としませんでしたが、この1つはちょうど私を得たいくつかの時間の原因のためのフォーラムで活躍していませんでした。 私は私の知識のすべてを試しました - そして私はすべてを意味します、私は狂信的な試行錯誤者です。jQuery、Ajax、WP、投稿4000B長いテキスト:404が見つかりませんでした(2000B = OK)?

状況: jQueryは、主に$( 'textarea')からサーバー上のphpファイルに収集されたAjaxを介していくつかのデータを投稿します。 データが> Xバイトの場合、Ajaxエラーハンドラの404 Not Foundと404 Htmlページが表示されます。 それ以外の場合は、すべてがスムーズに実行され、結果が得られます。

計算を行う前にWordpressのwp-blog-header.phpを読み込むPHPファイルに投稿するように指定する必要があります。コードはWPpluginの一部であることが意図されています。

  • 私は、システムの一部としてファイルを見つけられなかったためにWPがヘッダを変更していると考えて、ヘッダ( "HTTP/1.1 200 OK")を返そうとしましたが、遠くにはない。
  • ajax呼び出しでContent-Lengthを設定しようとしました。
  • は、私は私のプラグインのフォルダに、Ajaxの呼び出しを処理し、そして私自身の.PHPファイルを持つのWPタイプとの間で切り替えます。
  • 私のajaxファイルの先頭に、wp-load.php、wp-config.php、およびwp-blog-header.phpを交互に呼び出しました。何も解決しませんでした(ローカルで問題は解決しましたが、リモートでは解決しません)。 。 .phpファイルに送信されるコンテンツをトリミングするだけです。 2000-2500B ok、3000 + B私に404が見つかりません。

これは何だろうか? post_data_sizeはサーバー上で8Mです。 これは私がいくつかのケースで見たようにSSLに関連している可能性がありますか?これはサーバー側ですか?

P.S.、助けてください私のJavascriptを:

var data1 = { 
    action: 'get-tables', 
    html: $('#content').val(), 
    nonce: kwd_settings.nonce 
}; 
$.ajax({ 
    url: kwd_settings.ajax_url, 
    type: 'POST', 
    data: data1, 
    scriptCharset: 'utf-8', 
    timeout: 10000, /*10 seconds*/ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Content-length", $('#content').val().length+500); 
     showProgress(true); 
    }, 
    error: function (request, ajaxOptions, thrownError) { 
     alert(request.statusText); 
     alert(request.responseText); 
     showProgress(false); 
    }, 
    success: function(response) { 
     var r= response; 
     showResponse(r); 
    } 
}); 
+0

4000B以上のテキストエリアを持つ通常のHTMLフォームを正常に投稿できますか? –

+0

ちょうど試しました、いいえ、404エラーを出します。これは面白いです。 urlは正しいkwd-ajax.phpになりますが、404エラーページが表示されます。結局のところ、それは結局、ajaxのことではなく、Postのことだと思います。テキストを短いものに置き換えても、大丈夫です。 – Catalin

+0

Ok:ちょうど28.000文字の長いテキストを投稿しましたが、エラーなしで戻ってきました。私は私のalgoがメモリ豚か何かだと思う、私は多くのメモリ構造を割り当てるhtmlToolsクラスを使用する。 PHP DOM解析関数に移動する必要があります。 – Catalin

答えて

0

てみ設定:あなたは、さらにコメントで説明してきた症状を考えると

xhr.setRequestHeader("Content-length", 0); 
+0

それを試してみてください。同じレスポンス、Ajaxエラー、404です。コンソールで表示されるレスポンスは、「安全でないヘッダーを設定することを拒否されました」「Content-length」「 – Catalin

+0

」というように、サーバーはあなたに未定義の長さを設定させません。これを見てみるといいかもしれません:http://stackoverflow.com/questions/5515869/string-length-in-bytes-in-javascript –

0

は:

  1. 単純な正規POSTも同様に失敗します。
  2. エラーは、生のサイズではなく正確なデータ内容に依存します。
  3. SQLインジェクションによる損傷を防ぐための試みを示唆し、問題をトリガーcreate含む文字列。

...私はあなたのホスティングサービスは、mod_securitySuhosinとして、インストールされたセキュリティモジュールのいくつかの並べ替えを持っているかどうかを見つけるだろう。これまでのところ、それは最も可能性の高い容疑者です。

+0

はい、私はそう思います:また、そのフレーズからCREATEという単語だけをキャンセルするとエラーが発生します。しかし、私はすでに.htaccessの SecFilterEngineオフSecFilterScanPOSTオフ でmod_securityを無効にしました。だから私はAllowOverrideがオフに設定されていると思いますか?これは私にはわかりませんが、私はサーバー設定にアクセスできません...なぜ.htaccessがmod_securityを無効にしていないのか? – Catalin

+0

@Catalin - おそらく、mod_securityがインストールされていないか、SecFilterScanPOSTが '.htaccess'で許可されていません(何でも、私は[documentation](http://sourceforge.net/apps/mediawiki/mod-security /index.php?title=Reference_Manual#SecRequestBodyAccess))。 –

+0

私は疑問に思っています:どのように多くのプログラミング言語がこの種の問題から保護するのでしょうか?あまりにも脆弱で、一部の設定ではうまく動作しないような気がします。これは商用製品になっているはずなので、どのようにしてあらゆる種類の設定を持つクライアントから守ることができますか?あなたはそれをPOSTする前にテキストをbase64でエンコードしていると思いますか? – Catalin

0

(私のトラブルシューティングの全体の日を取った)私はこれが古い質問ですけど、何の解決策は存在しないので、私は文字通りこれに対する解決策を自分自身を見つけたが、私はそれが掲示価値がある考え出し。問題はIISの既定の "要求フィルタリング"オプションでした。私は "要求フィルタリング"画面を開き、(画面の右側にある) "機能設定の編集"をクリックし、最大許容コンテンツ長、最大URL長、および最大クエリ文字列長を、投稿。私はその後IISを再起動し、ERROR 404が停止し、私の投稿が完了しました:-)

何らかの理由でウェブ上のどこでもこの回答が見つかりませんでした。

+1

唯一の問題は、彼はApacheを使用しているとあなたはIISについて話している。だから彼の問題の解決策ではありません。 – shaggy

関連する問題