ブラウザに依存していますか?また、Webスタックが異なると、リクエストから取得できるデータ量に制限がありますか?
ブラウザに依存していますか?また、Webスタックが異なると、リクエストから取得できるデータ量に制限がありますか?
回答:
RFC 2616(ハイパーテキスト転送プロトコル— HTTP / 1.1)は、クエリ文字列の長さに制限がないと述べています(セクション3.2.1)。RFC 3986(Uniform Resource Identifier — URI)にも制限はないと記載されていますが、DNSの制限のためにホスト名が255文字に制限されていることが示されています(セクション2.3.3)。
仕様では最大長は指定されていませんが、実際の制限はWebブラウザーとサーバーソフトウェアによって課されます。残念ながら元のサイトでは利用できなくなった調査(これは怪しげなローンのサイトにつながります)に基づいていますが、それでもInternet Archive Of Boutell.comで見つけることができます。
Microsoft Internet Explorer(ブラウザ)
Microsoftは、Internet ExplorerのURLの最大長は2,083文字で、URLのパス部分は2,048文字以下であると述べています。これより長いURLを使用しようとすると、Internet Explorerで明確なエラーメッセージが生成されました。
Microsoft Edge(ブラウザ)
制限は約81578文字のようです。Microsoft EdgeのURLの長さ制限を参照してください
Chrome 64万文字を超えるとURLの表示が
停止しますが、10万文字を超える場合があります。それ以上のテストは行われませんでした。
Firefox(ブラウザ)
65,536文字を超えると、Windows Firefox 1.5.xではロケーションバーにURLが表示されなくなります。ただし、より長いURLは機能します。10万文字を超えると、それ以上のテストは行われませんでした。
Safari(ブラウザ)
少なくとも80,000文字が機能します。テストはそれ以上試みられませんでした。
Opera(ブラウザ)
少なくとも190,000文字が機能します。190,000文字後にテストを停止しました。Opera 9 for Windowsは、190,000文字でも、完全に編集、コピー、貼り付け可能なURLをロケーションバーに表示し続けました。
Apache(サーバー)
約4,000文字のサーバーURLの長さ制限にぶつかったWebブラウザーでURLの最大長を測定する初期の試みは、その後、Apacheが「413エンティティが大きすぎます」エラーを生成しました。Red Hat Enterprise Linux 4にある最新のApacheビルドが使用されました。公式のApacheドキュメントでは、リクエストの個々のフィールドの8,192バイトの制限についてのみ言及しています。
Microsoft Internet Information Server(サーバー)
デフォルトの制限は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のすべての出現箇所を探し、それらをより大きな値に置き換えます。もちろん、これによりサービス拒否攻撃の危険性が高まります。
java.lang.IllegalArgumentException: Request header is too large
Tomcatのスプリングブートアプリケーションサーバーに原因があります。
公式にはRFC 2616で指定されている制限はありませんが、多くのセキュリティプロトコルと推奨事項では、サーバーのmaxQueryStringsは最大文字数の1024に設定する必要があると述べています。クエリ文字列を含むURL全体は最大2048文字。これは、WebサーバーでのスローHTTPリクエストDDOSの脆弱性を防ぐためです。これは通常、Qualys Web Application Scannerおよびその他のセキュリティスキャナーの脆弱性として現れます。
以下のWeb.configを使用したWindows IISサーバーのサンプルコードを参照してください。
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="1024" maxUrl="2048">
<headerLimits>
<add header="Content-type" sizeLimit="100" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
</system.webServer>
これはmachine.configを使用してサーバーレベルでも機能します。
注:クエリ文字列とURLの長さを制限しても、スローHTTPリクエストのDDOS攻撃を完全に防ぐことはできませんが、これを防ぐための1つのステップです。