Basic認証だけじゃない⁉スマホでpdfがダウンロードできない原因

開発中のサイトで、スマートフォンではpdfのダウンロードができないことがありました。最終的にダウンロードできるようになりましたが、条件が複雑怪奇だったので、今回はこの話題にしたいと思います。

一瞬でメッセージが消える

開発中のサイトにはBasic認証がかかっていました。pdfのダウンロードリンクをクリックし、ID/パスワードを入力すると「ダウンロードを開始します・・・」というメッセージが表示されるのですが、このメッセージが一瞬で消えていなくなります。

Screenshot_2015-11-26-18-42-42-s

Basic認証が原因かと思い、pdf拡張子のURLだけ、Basic認証を外してみました。が、何も変化はなく、一瞬で「ダウンロードを開始します・・・」が消えてしまいます。

条件がもう一つあった

実はこのサイト、テストサイトだったので自己署名証明書を使っていました。これを認証済みの正しいサーバー証明書に置き換えたところ、pdfがダウンロードできるようになりました。

この後、Basic認証を設定したところダウンロードできなくなってしまったので、まとめると「認証済みサーバー証明書」+「認証なし」の両方の条件がpdfダウンロードには必要、ということになります。

ブラウザによる違いもあり

改めて各種ブラウザで構成による動作の違いを調べてみました。

■Huawei P8Lite(Android 5.0)

構成 標準ブラウザ Chrome
HTTP+Basic認証なし OK OK
HTTP+Basic認証あり NG OK
HTTPS+Basic認証なし OK OK
HTTPS+Basic認証あり NG OK
HTTPS(自己署名)+Basic認証なし NG NG
HTTPS(自己署名)+Basic認証あり NG NG

■Xperia GX(Android 4.1)Huawei P8Lite

構成 標準ブラウザ Chrome
HTTP+Basic認証なし OK OK
HTTP+Basic認証あり NG OK
HTTPS+Basic認証なし OK OK
HTTPS+Basic認証あり NG OK
HTTPS(自己署名)+Basic認証なし NG NG
HTTPS(自己署名)+Basic認証あり NG NG

■iPhone 6(iOS 8.0)

構成 Safari Chrome
HTTP+Basic認証なし OK OK
HTTP+Basic認証あり OK OK
HTTPS+Basic認証なし OK OK
HTTPS+Basic認証あり OK OK
HTTPS(自己署名)+Basic認証なし OK OK
HTTPS(自己署名)+Basic認証あり OK OK

iOSは問題ありませんが、Androidは標準ブラウザとChromeとで動作が異なるという結果でした。標準ブラウザとChromeとではpdfをブラウザ内に表示するか否かが異なるので、おそらくこの表示方法の違いが影響したようです。

pdfがダウンロードできない場合には、Basic認証を外し、SSLの場合には正しいサーバー証明書を使うようにしましょう。