URL の最大長は何文字?

ユーザーエージェントおよびサーバの実装に依存します。スキーム、ホスト名を含めて、255 バイト以下は安全です。メジャーなブラウザとサーバに限定すれば、2000 バイト程度までは使えるでしょう。

  1. SGML では 1024 文字
    HTML のスーパーセットである SGML では、LITLEN=1024 文字とされています。
    RFC2070 | URL の長さの制限って | HTML 4のSGML宣言
  2. HTML 4.01 では 65536 文字
    HTML 4.01 では LITLEN=65536 文字です。
  3. HTTP では未定義、255 バイト以下を推奨
    RFC2616 (HTTP/1.1) には、URL の長さに関する規定はありません。ただし、

    Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or プロキシ(proxy) implementations might not properly support these lengths.

    と、255 バイト以下が推奨されています。

  4. Internet Explorer は 2083 バイト
    URL の最大長が 2083 バイトです。
    「URL に使用可能な文字数は最大 2,083 文字」
    IE3.02 のころは 1KB 程度だったようです。
  5. Mozilla/Firefox は事実上無制限
    少なくとも 2MB (200 万文字)は送信可能なことを確認しました(後述)。ソースコードは未確認ですが、事実上無制限と考えてよいでしょう。
    ただし、あまりに長い URL は、アドレスバーが表示されなくなる、極端に動作が遅くなる、などの不具合があります。
  6. その他のブラウザ (Opera, NetFront など)
    未確認
  7. Apache は 8177 バイト
    Apache HTTP server では、HTTP リクエスト行の長さが LimitRequestLine を超えると、414 Request-URI Too Large エラーを返します。
    LimitRequestLine のデフォルト値は 8190 バイトです。Apache 2.0 では 0 からDEFAULT_LIMIT_REQUEST_LINE (=8190)の間で設定可能です。Apache 2.2 では任意の値にセットできます。
    通常のリクエスト行は
    GET <url> HTTP/1.1
    ですから、url 部分の最大長は 8177 バイトということになります。
  8. 実験

    <html>
    <form action=”show.php”>
    <textarea name=”t” ></textarea>
    <input type=”submit”>
    </form>
    </html>

    のようなフォームでデータを送信してみました。

    Internet Explorer 6 + Apache 2.0 の場合
    2083 バイトまでは送信可能です。それ以上は submit ボタンを押しても送信しなくなります。

    Firefox 1.5 + Apache 2.0 の場合
    8177 バイトまでは送信可能です。それ以上は 414 Request-URI Too Large になります。

    Firefox 1.5 + Apache 2.2 の場合
    LimitRequestLine 十分大きく設定すれば、十分長い URL を送信できます(2MB まで確認)。

  9. 備考
    サーバのファイルシステムの最大文字長や、ドメインの長さなど、他の要因で制限される場合もあります。
    ext2 のファイル名は 255 バイトまで
    ドメイン名は 255 オクテットまで (RFC1034)

Leave a Reply