スポンサーリンク

WebページのURLの長さは,ブラウザのGETリクエスト制約で,最大2000文字ほどに制限したほうがよい

URLの長さは,最大でも2000文字ほどの長さに収める必要がある。

これは,「GETリクエストの最大長」の制約となる。

  • (通信プロトコル面) HTTPの仕様上は,URLの長さに制限は無い。
  • (クライアント,ブラウザの面) IEは,URLの長さに制限がある。


つまりIEのせいなのだが…,

これはWebの世界では,事実上の標準的なリミットということだ。


そのため,GETのパラメータ文字列も,無限に長くはできない。

クエリ文字列を含めて,全体で2000文字ほどに収める必要がある。

Webアプリの設計時には注意しよう。

参考資料

HTTPの仕様では,もともとURLの長さに制限は無い。

[tech]HTTP GETメソッドのURIの長さ制限を調べてみた - Kazumi007の日記
http://d.hatena.ne.jp/Kazumi007/20090921/1253501500

  • HTTP1.1の仕様上は,HTTP GETで転送できるデータ量(=URIの長さ)には上限がない
    • HTTP GETメソッドにはRFC上、URIに255byteの制限はない
    • Webサーバ側でも,デフォルトでは制限されていますが、設定で変更することが可能。
  • いくらサーバ側で長いURLを受け付けられたとしても、ブラウザからリクエストを送信できなければ意味がありません。
    • IEは, MicrosoftがURLの上限に関する情報を公開している。 IE3.0~IE8.0までが対象となっているので、ほぼすべてのバージョンで2083文字以上の指定ができないと考えた方が良い
    • 制限が小さいせいで、IEがデファクトスタンダードになっている。


URLは最高何文字まで可能なのでしょうか? - HTML 解決済 | 教えて!goo
http://oshiete.goo.ne.jp/qa/7969461.html

  • HTTP 1.1 (RFC2616) では,URIの文字長に制限はありません
    • また,例えば data: スキーム(RFC 2397)ではURLは非常に長くなる。リソース自体を文字列化して URL にしてしまうため,リソースが大きくなれば文字列も膨大なものになる。
  • 送信フォームなどでURLの長さを200文字くらいに制限しているところもある
    • その目的は,データベース側が保存できる容量によるものだったり、サイト攻撃のスクリプトなどを埋めこまれないようにするための処置だったりする。


IEだけが特殊なブラウザであり,約2000文字を超えるURLを処理できない。

ChroneやFirefoxなどのモダンブラウザでは,32000文字ぐらいまで処理できるのに。

IE11で使用可能なURL文字数が2083文字しかない件 - 文系プログラマによるTIPSブログ
http://www.bunkei-programmer.net/entry/2014/09/03/213528

  • chrome等も厳密には制限はありますが,実質制限が無いのと同じ状況。
    • 実際はchromeの文字数制限より先に、webサーバ側のパケットサイズ制限にひっかかる
  • web開発者にとっては, URLの使用文字数というのは非常に重要
    • IEが対応してないからURL設計を特殊にしたり、IEだけjs/cssがおかしいから条件分岐したりするなど、IEだけおかしいという仕様のために,我々開発者は長年苦しめられている。


IE11 の URL の最大長はあいかわらず 2083 でした。他のブラウザは三万超えているのに・・・ : logical error
http://logicalerror.seesaa.net/article/383427331.html

  • IE11: 2083
  • Google Chrome: 32464
  • Firefox: 32491


Webサイトを開発する際に,

「IEだけは,なぜかAjaxが正常に動かない」などのトラブルに苦しめられ,

その原因がURLの長さだったりする。

[IE] URL に使用可能な文字数は最大 2,083 文字 | [ま]技術雑記
http://blog.kaburk.com/browser/ie-url-max-2083.html

  • サーバに非同期通信してた気がしたのでソースを調べてみると、prototype.jsにてAjax.Requestしていた。
    • しかし、そこのメソッドがGETになっていた。
  • IEで動かないという時にまず思い浮かんだのが、「URL長すぎ」


もし,URLの文字数を気にせず,たくさんのパラメータを送りたい場合は,

GETではなくPOSTでフォームを設置するようにしよう。

【PHP】GETとPOSTの違い、使い分けと使い方を紹介
http://scene-live.com/page.php?page=27

  • GETメソッドはデータをURLの末尾につけて送るので、制限されることになります。
    • 大量のデータを送信したい場合はPOSTメソッドを用いる
    • POSTメソッドは、URLの長さの制約から影響を受けない。


なお,この「URLを2000文字以下に制限」という制約は,

Webアプリとブラウザだけの問題ではない。

検索エンジンやSEOの観点から見ても,2000文字以下が推奨されているのだ。

「URLの長さは2,000文字より短くした方がいい」とGoogleのMueller氏がアドバイス | SEOモード
http://www.seomode.jp/seo/2014/03/08/2725/

  • サイトマップXMLで処理できるURLの長さも「2,048文字以下」と指定されています。