0

Web ブラウザは、攻撃を防ぐために投稿できるデータ (文字) に制限があります。IE では約 2000 文字、Chrome では約 65,000 文字です。

200,000 以上の文字を含むフィールドを持つフォームを投稿しようとしています (正確にはベクトルの強力な json)。

これは、どのブラウザーでも許容できる範囲をはるかに超えているため、投稿を受信する PHP ページには約 40% のデータしか表示されません。

これを回避する唯一の方法は、フォームの投稿をストリーミングして、PHP が段階的に受信できるようにすることです。

これは $raw = file_get_contents('php://input'); で行うことができますか? たとえば、「アプリケーション/オクテットストリーム」のフォームエンコーディングタイプと組み合わせて?

どうもありがとう、セブ

4

3 に答える 3

1

URL の長さの制限とアップロードの制限を混同しています。URL 経由で渡されるデータはGETクエリであり、それらはブラウザごとに長さが制限されています。

任意の「大きな」データを渡す必要がある場合は、POST を使用します。これには、任意のクライアント側の長さ制限がなく、サーバーで構成された制限のみが適用されます。

于 2013-01-24T20:06:24.730 に答える
1

Linux などで PHP を使用している場合は、次の.htaccessようにを使用してこれらを制御できます。

#set max post size
php_value post_max_size 50M

これにより、コーディングを台無しにするのではなく、より多くのデータを送信できるようになることを願っています.

リクエスト (GET および POST) の URL 部分は、ブラウザーとサーバーの両方によって制限される可能性があります。これより小さな制限を使用するブラウザーやサーバーはほとんどないため、通常、安全なサイズは 2KB です。

リクエスト (POST) の本文は、通常*、ある種の DoS 攻撃を防ぐために、サーバーによってバイト サイズごとに制限されます (これは、文字エスケープによって本文のバイト サイズが増加する可能性があることに注意してください)。最も一般的なサーバー設定は 10MB ですが、一般的なすべてのサーバーでは、設定ファイルまたはパネルを介してこれを増減できます。

于 2013-01-24T20:06:12.740 に答える
0

わかりました-問題が何であるかがわかりました。データは、Apache に到達する前に WAF フィルターを通過していました。これは、投稿制限が 64Kb の mod_security を実行しています。

于 2013-02-01T13:41:30.890 に答える