POSTメソッドは使えない。どうしてもGETメソッドで大量のデータを扱いたいときの対処方法。

Webアプリケーション制作でどうしてもPOSTメソッドが使えない。でも、GETメソッドで扱えるデータでは足りない。そんなつまずきへの対応方法をお話します。そもそもGETメソッドであまり多くのデータを扱えないのはIEによる制約、その次はApacheの設定による制約です。IEでの利用を禁止し、Apacheの設定に追記して再起動すれば問題は解決です。IEをサポートから外せないのであれば Promiseパターンで複数の非同期通信を束ねるようなプログラムを書くことで解決できます。

今回はWebアプリケーション制作者向けのお話です。

Webアプリケーションではサーバとの
非同期通信にPOSTメソッドをよく使います。

しかし、Webアプリケーションの中に、
http と https のようなスキームの混在や
ドメインの異なるサーバがあると、
PSOTメソッドは使えません。
このような場合には、GETメソッドとJSONPを使います。

IEとApacheによるGETメソッドの限界

技術的な仕様としては、GETメソッドで扱える
データ (URLの最大文字数) に上限はありません。
しかし、実用上は GETメソッドで扱えるデータは以下の制約を受けます。

  1. IEで使用できる最大文字数は2083文字。
    ※他のブラウザにはこれほど厳しい制約はない。
  2. Apache 2.2が受け入れるのは最大で8190バイト。
    ※コンパイル時の定数 DEFAULT_LIMIT_REQUEST_LINE による。

IEの利用を禁止し、Apacheで対応する

まず、IEからの利用を禁止します。
これでブラウザ側の制約はほぼ無くなります。

次にApache側で対応をします。
LimitRequestLine ディレクティブを設定します。
httpd.conf に以下のように追記して
apacheを再起動します。

LimitRequestLine 10000

GETメソッドでも10000バイト受け取れます。
このようにすればサーバ側の制約も無くなります。

GETメソッドで好きなだけデータを送受信できます。

試しに、手元で Apache 2.2 を用意して
Firefox からGETメソッドで 9000バイトの
データを送ったところ、ちゃんと受信できました。
DEFAULT_LIMIT_REQUEST_LINE の値を書き換えて
コンパイルとかは必要ないです。念のため。

IEはサポートから外せない場合

IEがサポートから外せない、あるいは
.htaccess をちょっと編集できる
くらいの権限しかないなどの場合は
上記の方法は使えません。

かなり面倒ですが Javascript で
Promiseパターンによるちょっとだけ複雑な
プログラムを書きます。

非同期通信を複数同時に並走させ、
全てのレスポンスを束ねるのです。

jQuery、Promise、Deferred などで
検索するとプログラムの書き方の解説が
沢山みつかります。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。

  1. IEは使います。POSTは使えません。でも制約以上のデータを送る必要がある……どうしたらいいの?
  2. iframe がうまく動かない?X-Frame-Optionsってなに?どうしたらいいの?

など、気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*