Android クライアントが Apache HTTP クライアントを使用してサーバーにリクエストを送信するとき、同じ HTTP メソッドを使用して新しい URL (より具体的には、他のコンテキスト パス) にリダイレクトする必要があります。
httpd.conf で、ステータス コード 307 でこのルールを設定しました。
Redirect 307 /mybipper/reg /mybipperapi/old/reg
ウィキペディアのステータス コードの説明によると、307 は次のようにする必要があります。
http://en.wikipedia.org/wiki/HTTP_307#3xx_Redirection
307 一時リダイレクト (HTTP/1.1 以降) この場合、別の URI で要求を繰り返す必要があります。ただし、今後のリクエストでは引き続き元の URI を使用できます。[2] 302 が歴史的にどのように実装されたかとは対照的に、元のリクエストを再発行するときにリクエスト メソッドを変更するべきではありません。たとえば、別の POST 要求を使用して POST 要求を繰り返す必要があります。
しかし、私のアクセス ログを見ると、HTTP クライアントはそれを尊重していないようで、ステータス コード 302 を返したかのように代わりに GET を実行しています。
172.29.9.120 - - [21/Sep/2012:14:02:11 +0300] "POST /mybipper/reg HTTP/1.1" 307 248
172.29.9.120 - - [21/Sep/2012:14:02:11 +0300] "GET /mybipperapi/old/reg HTTP/1.1" 400 1016
Apache HTTP クライアントの Web サイトによると、ステータス コード 307 をどのように処理するべきかは少し不明ですが、少なくともそこには記載されています。
http://hc.apache.org/httpclient-3.x/redirects.html
HTTP 1.1 プロトコルを正しく実装していない Apache HTTP クライアントを強く感じています。正しいですか、それとも何か誤解していますか?
私たちが使用する Apache HTTP クライアントは、Android SDK にバンドルされています。私がテストしていた電話には Android SDK 15 がありました。
http://developer.android.com/about/versions/android-4.0.3.html