[HTML]Formの入力要素に字数制限はあるのか

| トラックバック(0)

フォームのINPUT要素にはValue属性があり、これがサーバーに送信される。ところで、このValue属性に文字数制限はあるのだろうか・・・。

どこかで、TYPE="HIDDEN"には字数制限がない、という記事を見かけたが、それ以外の要素はどうなのか。

試してみた。



ご注意:以下の検証はLAN内の自前サーバーで行っています。同様の検証をしてみる場合でも、レンタルサーバーや外部のサーバーに対して行うと迷惑になるのでやめましょう。


検証1:TYPE="TEXT"の場合

あらかじめ、VALUE属性に大量の文字を設定し、それをサーバーへPOSTしてみる。

まず、1万文字。問題なく送信できる。

10倍して10万文字。これもOK。

さらに10倍して100万文字。これも大丈夫。

そして1,000万文字。ここで、IEがギブアップ。テキストボックスに文字が表示されなくなった。Operaでは文字は表示されたものの、フォームを送信すると、今度はサーバーがギブアップ。(接続を強制切断した模様)

1,000万文字はムリなようなので、200万文字に挑戦。やはりIEではテキストボックスに文字が表示されないため、Operaで挑戦するも、サーバーの送信サイズ制限にひっかかった。

Web.configで、送信可能サイズを100MBに変更して再挑戦。

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="100000"/>
  </system.web>
</configuration>

Operaからであれば、200万文字をクリア。

ついでに500万文字でも試してみると、これもOperaならクリア。

TYPE="TEXT"の場合、文字数制限はHTMLやサーバーの制限よりも、ブラウザのテキストボックスの制限の方が先にくる様子。

ちなみに、IEではテキストボックスに文字が表示されていなくても送信すればデータはちゃんと送られていることを確認。


検証2:TYPE="HIDDEN"の場合

いきなり500万文字に挑戦。問題ナシ。

10倍にして1,000万文字。大丈夫。

そして大台の1億文字(100MB相当)。Operaでは送信できたが、IEではブラウザが悲鳴を上げ始めた。

1,000万文字から小刻みに字数を増やしてみると、2,000万文字までは送信できたが、2,500万文字ではブラウザの反応が不安定になった。

TYPE="HIDDEN"では、ブラウザのキャパシティやサーバーの処理性能に依存するようです。


検証3:TYPE="CHECKBOX"の場合

1,000万文字であればIE、Operaともにクリア。 

IEはやはり2,500万文字を越えられないが、Operaは1億文字まで送れた。

 Valueの中身が表に出ないのでHIDDENと同じと考えていいかもしれない。 

実験していないが、TYPE="RADIO"の場合も同様と思われる。


検証4:SELECT要素のOptionの場合

OPTION要素のValue属性も、表には出ないのでやはりTYPE="HIDDEN"と同じと推測。

2,500万文字で挑戦。予想外にIEでも送信できた。ただ、この辺りはブラウザの状態や使用状況に左右されるかもしれない。

5,000万文字ではIEがリタイヤ。Operaは依然問題なし。

続いて1億文字で挑戦。Operaでもなんとか送信できたが、同じ作業を何度か繰り返すとページがレンダリングされなくなった。おそらくキャッシュが限界?


検証5:TEXTAREA要素の場合

TYPE="TEXT"でIEがギブアップ(テキストが表示されなくなった)した1,000万文字に挑戦。

IEでも問題なく表示・送信ができた。これは、テキストボックスが単一行ではなく複数行になったからと思われる。しかし、Operaではアプリケーションが応答なしになってしまった。どうやら、Operaは複数行テキストボックスの描画がIEよりも苦手な様子。(500万文字でも動作が不安定になる)

いずれにしても、TEXTAREAもブラウザのキャパシティに依存する様子。


結論

フォームで送信できるデータサイズに制限はない。これは、TYPE="FILE"にしてGB単位のファイルでも送信できることではっきりしている。(無論、サーバー側の許容量を超えることは出来ない)

今回はっきりしたのは、入力要素の種類に関係なく、ブラウザは処理能力の許す限りデータを受け取り、送信しようとする。制限があるとすれば、それはHTMLの仕様というより、ブラウザやサーバーの処理能力の限界と見てよいでしょう。


今回の検証ではIEとOperaに限定して実験を行いました。同じブラウザでも異なるバージョンや、他のブラウザ、携帯電話、スマートフォンなどで結果は変わると予測されます。特に、携帯電話の場合、送信できるサイズは極端に小さくなる可能性があります。

また、検証方法自体が結構雑なので、結果はあまり過信しない方が良いとは思います。

トラックバック(0)

トラックバックURL: /mt/mt-tb.cgi/67