- PR -

POST送信での文字数制限について

1
投稿者投稿内容
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2005-11-01 19:48
お世話になっています、Javaの会議室での質問か微妙なところですが
質問させてください。

JSPからPOSTで文字数数万バイトの文字列(TextArea)を送信し、Servletにて
getParameterで取得しているのですが、4000バイトあたりでデータ
が切れてしまいます(ログ出力にて確認)

いろいろググってみたところGETの場合は文字数の制限があるようですが
POSTについてもあるのでしょうか?

Webサーバ自体そのような設定をもっているものなのでしょうか?

かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2005-11-02 12:39
WEBサーバーからはどんなステータスコードが返されているでしょうか?
もしかしたら、返されるステータスコードが解決の糸口になるかもしれません。
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2005-11-02 12:56
ログ出力にて確認とありますが、どのように確認したのでしょう?
実は、ログ出力機能が4000バイトしか出力できないという制限があったりしないでしょうか?
受け取ったデータをそのままログ出力しているだけでしたら、データの長さもログに出力してみては。

はずしていたらすみません。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-11-02 14:58
引用:

いろいろググってみたところGETの場合は文字数の制限があるようですが
POSTについてもあるのでしょうか?



RFC的には、HTTPのGETに長さの制限は無かったように思います。
http://www.studyinghttp.net/uri#HTTP_URI

POSTに制限があるという話も聞いたことは無いです。

ただ、現実問題として、データ長の制限無しにリクエスト者の期待に応えられるサーバ、及びクライアントの実装というのは考え難いので、どこかで止められるとは思います。
また、資源の保護のためにセキュリティ関係の製品がその機能を持っている場合もあるようです。

今回のケースでデータをちょん切ってしまっているのがクライアントなのか、Webサーバなのか、Apサーバなのか、その他なのかは、もうちょっと詳細な状態が分からないことには答えようがないと思います。

---

(余談)
話はちょっと飛びますが、上で挙げたサイト
http://www.studyinghttp.net/
は良く纏まっていて素晴らしいと思います。お勧めです。
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2005-11-02 15:15
かずくんさん
サーバから特に何もかえってきてない状態です。

まいるどきゃっと さん
ログは以下内容からも怪しい気がします。
管理者へ問い合わせを行ってみます。

永井和彦さん
参考サイトありがとうございます、たどりつけていない
サイトだったので早速調べてみます。

いくつか判明した点があるので追記

画面(JSP)からTextArea内の値をPOST送信時、文字が切れていたのですが
TextAreaの制限?と思い分割して送信し(TextAreaを複数用意 name属性をField+連番)
Servlet側でgetParameterでField+連番がnullになるまでループ処理をし
その都度ログ出力したところ、分割されてServletで受け取ることができました。

その際、Stringで値を取っていたものをStringBufferへ変換しました。
文字列をgetParameterのたびにStringBufferへappendしているのですが、
toStringをかけるとやはりきれてしまいます。

サイズをはかった所 ループで正しく取得されている各サイズの合計と
連結後のサイズは同じでした。

この場合やはりログ出力の際のサイズでしょうか?
Stringクラスか、ログが怪しいようですので引き続き調査中です
sinh
ベテラン
会議室デビュー日: 2003/01/22
投稿数: 87
投稿日時: 2005-11-03 10:50
引用:
--------------------------------------------------------------------------------
Stringクラスか、ログが怪しいようですので引き続き調査中です

--------------------------------------------------------------------------------
少し古いネタかもしれないですが、JavaHouseの
 http://java-house.jp/ml/archive/j-h-b/006681.html#body
にて、Stringの長さについて書かれています。
このあたりが、関係してこないでしょうか?
うみゅ
会議室デビュー日: 2005/10/11
投稿数: 12
投稿日時: 2005-11-03 21:58
亀レスですが
Webサーバーの Apache の場合は LimitRequestBody というので制限されています。
参考
http://httpd.apache.org/docs/2.0/mod/core.html#LimitRequestBody
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2005-11-09 15:36
お世話になっています、遅いレスになってしまい
ましたが、やっと解決できたので報告します。

原因特定が難しかったので環境なのか、プログラムなのか
ひとつずつ切り分けていったところ、環境+文字コードに
問題がありました。

まず動作環境でのログが切れる現象があった為ローカルに
Tomcatにて確認したところ文字列自体は無事送受信できていました。

動作環境でコンソールで中身を見ていた際、文字化けしていなく
出力されていたので、正しく送られていると思っていたのですが
その後の処理にてMS932と指定していなければならない処理が
あり、そこでコンソールには表示されているが、コードはMS932
でなかった為落ちていました。

うまく切り出せず、情報も全部出せていなかった為、ご迷惑
おかけしましたが上記理由を解消させることで正常に動作させる
ことができました。ありがとうございました
1

スキルアップ/キャリアアップ(JOB@IT)