1. ホーム
  2. browser

[解決済み] クエリ文字列の最大長を教えてください。

2022-03-16 19:17:02

質問

ブラウザ依存ですか? また、ウェブスタックによって、リクエストから取得できるデータ量の上限が異なるのでしょうか?

解決方法は?

RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1) では、クエリ文字列の長さに制限はないとされています (セクション 3.2.1)。 RFC3986 (Uniform Resource Identifier - URI)でも制限はないとされていますが、DNSの制限によりホスト名は255文字に制限されていることが示されています(2.3.3項)。

仕様では最大長を規定していませんが、ウェブブラウザやサーバソフトウェアによって現実的な制限が課せられます。残念ながらオリジナルのサイトではもう利用できないが(怪しげなローンサイトにつながる)、次のサイトで見られる調査に基づいている。 Boutell.comのインターネットアーカイブ :

  • Microsoft Edge(ブラウザー)

    81578文字程度が限界のようです。参照 Microsoft EdgeのURL長さの制限

  • クローム

    停止する 表示 は64k文字で終了しますが、100k文字以上のURLは提供可能です。それ以上のテストは行っていない。

  • Firefox(ブラウザー)

    Windows版Firefox 1.5.xで65,536文字を超えるとロケーションバーにURLが表示されなくなる。ただし、長いURLは動作する。100,000文字以降のテストは行っていません。

  • サファリ(ブラウザー)

    少なくとも80,000文字以上で動作します。それ以上のテストは試していません。

  • オペラ(ブラウザー)

    少なくとも19万文字以上で動作します。190,000文字でテストを中止。Opera 9 for Windowsは、完全に編集可能な文字列を表示し続けました。 190,000文字でもロケーションバーにコピー&ペースト可能なURLが表示されます。

  • Microsoft Internet Explorer(ブラウザー)

    マイクロソフト社によると、Internet ExplorerにおけるURLの最大長は2,083文字で、URLのパス部分は2,048文字以内とのことです。これより長いURLを使用しようとすると、Internet Explorerで明確なエラーメッセージが表示されました。

  • Apache (サーバー)

    ウェブブラウザの最大URL長を測定する初期の試みは、サーバのURL長制限の約4000文字にぶつかり、それ以降はApacheが "413 Entity Too Large" エラーを発生させるというものでした。Red Hat Enterprise Linux 4 で見つかった最新の Apache のビルドが使用されました。Apache の公式ドキュメントでは、リクエストの個々のフィールドに対する 8,192 バイトの制限にしか言及していません。

  • マイクロソフト インターネット インフォメーション サーバー (サーバー)

    デフォルトの制限は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の出現箇所をすべて探し、より大きな値に置き換えてください。 もちろん、これはサービス拒否攻撃への露出を増やすことになります。