Android には標準ブラウザという謎のブラウザが搭載されているケースがあります。 このブラウザの位置付けというのがホントに謎で、おい一体誰がどうやって作っているんだ教えてくれたのむ。
そんでこの標準ブラウザで検証してたら、PDF ファイルがダウンロードできないという謎の事象が発生してハマった。 Google 先生に恭しくお伺いを立てると、
- Android標準ブラウザでベーシック認証のページからはPDFはダウンロードできない | miyasaka.info
- AndroidDownloadManager にBasic認証などの認証情報が受け継がれずファイル保存が失敗する - 君たちは永遠にそいつらより若い
- AndroidのブラウザはBasic認証下ではアップロードも失敗する – MEMOUK
などというように、大量の謎挙動がヒットする。 ブラウザとダウンローダが別プロセスで、認証情報が引き継がれないとか、なんて疎結合…!!! 美しい設計…!!!!!! こんな狂歌が思い出される。
白河の清きに魚もすみかねて もとの濁りの田沼こひしき
しかし、今回のケースでは Basic 認証をかけていない。いったいどういうことなのか…。
今回は直 IP アドレス指定で検証を実施しており、当該の開発環境には HTTPS で接続していた。 証明書は当然ホスト名で作成されているので、IP アドレス経由でアクセスすると証明書エラーが表示される形になる。そしてこの時にブラウザによる PDF ダウンロードが失敗する。 というわけで、ホスト名を使用して HTTP リクエストを送信すると、このケースではダウンロードに成功した。 つまり、標準ブラウザのダウンローダはおそらく証明書エラーが発生するような状況では、ダウンロードを拒否しているのではないかという結論になる。
類似事象として以下のような内容もある。今回は自己証明書ではなかったのだけれど、やはり標準ブラウザの挙動は謎すぎてこわい。
標準ブラウザが近くに来たら、家から出ないようにしようと思います。