理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Android標準ブラウザでダウンロードに失敗するときはBasic認証とともに証明書エラーを疑え

Android には標準ブラウザという謎のブラウザが搭載されているケースがあります。 このブラウザの位置付けというのがホントに謎で、おい一体誰がどうやって作っているんだ教えてくれたのむ。

そんでこの標準ブラウザで検証してたら、PDF ファイルがダウンロードできないという謎の事象が発生してハマった。 Google 先生に恭しくお伺いを立てると、

などというように、大量の謎挙動がヒットする。 ブラウザとダウンローダが別プロセスで、認証情報が引き継がれないとか、なんて疎結合…!!! 美しい設計…!!!!!! こんな狂歌が思い出される。

白河の清きに魚もすみかねて もとの濁りの田沼こひしき

しかし、今回のケースでは Basic 認証をかけていない。いったいどういうことなのか…。

今回は直 IP アドレス指定で検証を実施しており、当該の開発環境には HTTPS で接続していた。 証明書は当然ホスト名で作成されているので、IP アドレス経由でアクセスすると証明書エラーが表示される形になる。そしてこの時にブラウザによる PDF ダウンロードが失敗する。 というわけで、ホスト名を使用して HTTP リクエストを送信すると、このケースではダウンロードに成功した。 つまり、標準ブラウザのダウンローダはおそらく証明書エラーが発生するような状況では、ダウンロードを拒否しているのではないかという結論になる。

類似事象として以下のような内容もある。今回は自己証明書ではなかったのだけれど、やはり標準ブラウザの挙動は謎すぎてこわい。

標準ブラウザが近くに来たら、家から出ないようにしようと思います。