質問
ブラウザに依存していますか?また、Webスタックごとに、リクエストから取得できるデータ量に制限がありますか?
解決
RFC 2616 (ハイパーテキスト転送プロトコル— HTTP / 1.1)では、クエリ文字列の長さの制限(セクション3.2.1)。 RFC 3986 も制限がないと述べていますが、DNSによりホスト名が255文字に制限されていることを示しています制限(セクション2.3.3)。
仕様では最大長は指定されていませんが、Webブラウザーとサーバーソフトウェアによって実際的な制限が課されています。 Boutell.com で見つかった調査に基づいて:
-
Microsoft Internet Explorer(ブラウザ)
Microsoftは、Internet ExplorerのURLの最大長は2,083文字であり、URLのパス部分は2,048文字以下であると述べています。これよりも長いURLを使用しようとすると、Internet Explorerで明確なエラーメッセージが生成されました。 -
Microsoft Edge(ブラウザ)
制限は約81578文字と思われます。 Microsoft EdgeのURL長さの制限 をご覧ください。
-
Chrome
64k文字の後にURLを表示しなくなりますが、10万文字以上を配信できます。それ以上のテストは行われませんでした。 -
Firefox(ブラウザ)
65,536文字を超えると、ロケーションバーにはWindows Firefox 1.5.xのURLが表示されなくなります。ただし、長いURLは機能します。 100,000文字を超えると、それ以上のテストは行われませんでした。 -
Safari(ブラウザ)
少なくとも80,000文字が機能します。それ以上のテストは試みられませんでした。 -
Opera(ブラウザ)
少なくとも190,000文字が機能します。 190,000文字後にテストを停止しました。 Opera 9 for Windowsは引き続き完全に編集可能な画面を表示しますが、 190,000文字であっても、ロケーションバーにコピーおよび貼り付け可能なURL。 -
Apache(サーバー)
WebブラウザーでURLの最大長を測定しようとする初期の試みは、約4,000文字のサーバーURL長制限にぶつかりました。その後、Apacheは「413 Entity Too Large」を生成しました。エラー。 Red Hat Enterprise Linux 4で見つかった最新のApacheビルドが使用されました。 Apacheの公式ドキュメントでは、リクエストの個々のフィールドの8,192バイトの制限についてのみ言及しています。 -
Microsoftインターネットインフォメーションサーバー(サーバー)
デフォルトの制限は16,384文字です(はい、MicrosoftのWebサーバーはMicrosoftのWebブラウザーより長いURLを受け入れます)。これは構成可能です。 -
Perl HTTP :: Daemon(サーバー)
最大8,000バイトが機能します。 PerlのHTTP :: Daemonモジュールを使用してWebアプリケーションサーバーを構築する場合、すべてのHTTP要求ヘッダーの合計サイズに16,384バイトの制限があります。これには、POSTメソッドのフォームデータ、ファイルのアップロードなどは含まれませんが、URLは含まれます。実際には、URLが8,000文字よりかなり長い場合、413エラーが発生しました。この制限は簡単に削除できます。 Daemon.pmですべての16x1024の出現を探し、それらをより大きな値に置き換えます。もちろん、これによりサービス拒否攻撃の危険性が高まります。
他のヒント
公式には制限はありませんが、多くのセキュリティ構成の推奨事項では、サーバー上のmaxQueryStringsを最大文字数1024に設定し、クエリ文字列を含むURL全体を最大2048文字に設定する必要があると規定されています。これは、Qualys Web Application Scannerおよびその他のセキュリティスキャナーに現れる遅いDDOS攻撃を防ぐために、Webサーバーの遅いHTTP要求の脆弱性を防ぐためです。
Web.configを備えたWindows IISサーバーについては、以下のコードを参照してください:
<security>
<requestFiltering>
<requestLimits maxQueryString="1024" maxUrl="2048">
<headerLimits>
<add header="Content-type" sizeLimit="100" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
異なるWebスタックは、異なる長さのhttp-requestをサポートします。私は経験から、Safariの初期のスタックは4000文字しかサポートしていなかったため、USER-STATEのためにASP.netページの処理が困難だったことを知っています。これはPOSTにも当てはまるため、ブラウザをチェックしてスタックの制限を確認する必要があります。新しいブラウザでも制限に達する可能性があると思います。思い出せませんが、そのうちの1つ(IE6、私は思う)には16ビットの制限、32,768などの制限がありました。