8/10 に SoftBank Developers Support Site にて「S!アプリ開発ガイド [端末情報 MIDP 2.0 対応端末編]」が更新されました。
一部端末に、HTTP の POST リクエストでデータを送信する場合のエンコーディングの特徴が制限事項として記載されました。
902T, 903T, 803T, 904T, 705T, 910T, 810T, 811T, 813T, 812T, 911T, 814T, 815T, 912T の場合
- POST データが 2016Bytes 以上の場合は、自動的にヘッダフィールドオプションを「Transfer-Encoding:chunked」にして送信する
- POST データが 2016Bytes 以下の場合は、Content-Length を付与して送信する。ただし、flash() をコールした場合はデータサイズによらず chunked 形式で送信する
705P, 706P の場合
- POST データが 2560Bytes を超える場合、chunked 形式で送信する場合がある。アプリからの flash() のコールの有無には依存しない
これは、S!アプリから Web サーバにデータを送るとき、Web サーバ側のアプリ(CGI 等)が対応しないと送信したデータにゴミが入ってしまいます。
これを欠陥と呼ぶのは自分に Web アプリプログラマとして知識と技術がないと公言しているようなものなので、呼びたくありません。ソフトバンクは受信も chunked 形式に対応しているので、お互い様です。
しかし、手間がかかるのは避けられず、うんざりします。
適当なことを書いちゃいました。
Apache のドキュメントを読むと、
mod_proxy に chunked の解説があるのは 2.2.xx 以降です。2.0.xx と 1.3.xx には chunked の解説がありません。
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
http://httpd.apache.org/docs/1.3/mod/mod_proxy.html
Axis2 と mod_proxy (古いやつ) は仲が悪い?
http://ls-al.jp/blog2/category_14/item_990.html
Apache 1.3.33 の mod_proxy は Transfer-Encoding: chunked を扱えなくて、解決策は Apache のバージョンを上げること(本文中には書かれていませんが、多分 2.0.xx 以降)だそうです。
WEB サーバ側の修正でできることは、
・Transfer-Encoding: chunked に対応することはできます
・Transfer-Encoding: chunked を止めさせることは、おそらく、できません
なので、サーバ側ソフトが Transfer-Encoding: chunked に対応するしかないです。
Transfer-Encoding: chunked の詳しい形式と、お使いの環境でのパース手順は確認しましたでしょうか。その確認から始めるのがいいと思います。
9/11(木)未明より、東芝端末で2016byte以上のPOST通信を行なったところ、サーバのApacheのエラーログに、chunked Transfer-Encoding forbiddenが吐き出せるようになりました。
この通信は、アプリからのPOST通信となります。
それまでは、正常にPOST通信が行なえており、サーバ側も特にいじっていない状態です。
何か解決方法をご存知でしょうか?
可能であれば、WEBサーバ側の修正のみで完結できればと考えております。
急なご質問で大変恐縮ですが、ご教授頂ければ幸いです。