Android付属ブラウザからのPOSTのリクエストに対して,Webサーバからリダイレクト応答(301/302)を返した場合の動作が独特で,はまったのでメモ.
現象
(A) 302リダイレクトの場合
- ブラウザ: POST /old_url/
- Webサーバ: new_urlへの302リダイレクトを返す
- ブラウザ: GET /new_url/
まぁ,普通です
(B) 301リダイレクトの場合
- ブラウザ: POST /old_url/
- Webサーバ: new_urlへの301リダイレクトを返す
- ブラウザ: 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";