先日の WebViewを使ったスクレイピング に引き続き。
WebViewのパフォーマンスを調査していたのだが,HTTPSでリダイレクトが発生する場合に 非効率な振る舞いを発見した。
これは Android の ブラウザでも同様だと思うので、開発者に改善を提案したい。
HTTP over SSLにおけるコネクション確立では、証明書の検証が必要である。検証にはそれなりの時間計算量を必要とする。Apache HttpClient では、同一サーバーに対するHTTPSのリダイレクト時には証明書の検証ステップを省略するようだ。これは traceview で確認した。
しかしながら、 WebView で同じサイトに接続すると、リダイレクトの度に証明書を検証している。
これは非常に非効率的なので、セキュリティ上の理由が無いのであれば改善されるべきだろう。
imode.net のモバイルモードは ログイン時に リダイレクトが 4回 発生する。
Debug.startMethodTracing で取得したトレースを次の図に示す。
リダイレクトの度に、 http0-3 のスレッドがデータをやり取りしている。
各スレッドが、毎回 TrustManagerImpl#checkServerTrusted を呼び出しており、それが実行時間の約半分を占めているように見える。