スマホでPDFがダウンロードできない原因
開発中のサイトで、スマートフォンではpdfのダウンロードができないことがありました。最終的にダウンロードできるようになりましたが、条件が複雑怪奇だったので、今回はこの話題にしたいと思います。
関連記事:
一瞬でメッセージが消える
開発中のサイトにはBasic認証がかかっていました。pdfのダウンロードリンクをクリックし、ID/パスワードを入力すると「ダウンロードを開始します・・・」というメッセージが表示されるのですが、このメッセージが一瞬で消えていなくなります。
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の場合には正しいサーバー証明書を使うようにしましょう。