Android付属ブラウザからのPOSTのリクエストに対して,Webサーバからリダイレクト応答(301/302)を返した場合の動作が独特で,はまったのでメモ.

現象

(A) 302リダイレクトの場合
  1. ブラウザ: POST /old_url/
  2. Webサーバ: new_urlへの302リダイレクトを返す
  3. ブラウザ: GET /new_url/

まぁ,普通です

(B) 301リダイレクトの場合

  1. ブラウザ: POST /old_url/
  2. Webサーバ: new_urlへの301リダイレクトを返す
  3. ブラウザ: POST /new_url/

POSTで,来ますか orz

うちでは,POSTを受信したときに自URLにリダイレクトするというCGIがあったのですが, 301リダイレクトを使っていると,Androidブラウザで無限リダイレクトにはまるので,悩んでしまいました. (無限リダイレクトとは言っても,実際にはブラウザが警告を出して停止します)

これは302リダイレクトに変更することで対処しましたが,Locationヘッダを返した場合は,必ず次はGETで来るものだと思い込んでいました... まじめにRFCか何かを調べた方が良さそう

補足

  • Android端末は,ドコモHT-03A.ファームウェア1.6
  • Webサーバは,Apache 2.2.X

301 redirectのCGI実装

print "Status: 301 Moved Permanently\n";
print "Location: $new_url\n\n";
302 redirectのCGI実装
print "Location: $new_url\n\n";