とあるPerlで作ったWebアプリでSoftBank携帯からアクセスすると

お客様の端末からはご利用になれません
(WJ46042E)

とエラーが。別のアプリだと問題なかった。

アクセスできないアプリのヘッダを調べてみると
(Firefox + FireMobileSimulator+ Live HTTP Headers で調べられます)

HTTP/1.x 302 Moved
Date: Tue, 31 Mar 2009 02:26:46 GMT
Server: Apache
Location: https://www.ほげほげ.com/hoge/fuga/aaa
Content-Type: application/x-perl
Transfer-Encoding: chunked
X-Pad: avoid browser bug

正常にアクセスできるプログラムの場合

HTTP/1.x 302 Moved
Date: Tue, 31 Mar 2009 02:27:41 GMT
Server: Apache
Location: https://www.ほげほげ.com/hoge/fuga/bbb
Content-Type: text/html; charset=ISO-8859-1
Transfer-Encoding: chunked

という感じで、redirect時のContent-Typeに違いがあるようです。
調べてみると、Content-Type: が認識できないときに WJ46042E エラーを返すようです。
しかし、SoftBankの開発者向けサイトでは検索してみたけど情報は載ってないみたいです。なんでかなー。

ということで、Content-Type:を修正してみました。
(今回の場合のPerlのアプリはCGI::Applicationをつかっていて、リダイレクトするところ)

sub _redirect
{
my $self = shift;
my $url = なんとかかんとか;
$self->header_type('redirect');
$self->header_props(-url=>$url);
return "Redirecting to $url";
}

となっているのを

sub _redirect
{
my $self = shift;
my $url = なんとかかんとか;
$self->header_type('redirect');
$self->header_props(-url=>$url, -type=>'text/html');
return "Redirecting to $url";
}

と修正することで正しくContent-Type:が出力され、携帯からのアクセスもOKでした。

参考: