Upgrade to Pro — share decks privately, control downloads, hide ads and more …

本番だけWebViewが500エラーになる

 本番だけWebViewが500エラーになる

Avatar for Hayate Kuronuma

Hayate Kuronuma

September 29, 2026

More Decks by Hayate Kuronuma

Other Decks in Programming

Transcript

  1. Androidで起きていたこと Authorization がリダイレクトを越えていた WebView トークン→Cookie ⽬的のページ エンドポイント SSR 上流 API

    ① loadUrl + Bearer ② 302 + Set-Cookie shouldOverrideUrlLoading 何もせず進める ③ Cookie + Bearer(そのまま持ち越し) ④ Bearer を素通し ⑤ 検証に失敗 ⑥ 500 © 2026 Wantedly, Inc.
  2. 検証環境では問題なかったわけ 検証環境は、たまたま助かっていた WebView トークン→Cookie ⽬的のページ エンドポイント SSR 上流 API ①

    loadUrl + Bearer ② 302 + Set-Cookie shouldOverrideUrlLoading 検証環境⽤ヘッダに付け替え ③ loadUrl + Basic(Cookie あり、Bearer は消えた) ④ Basic を素通し ⑤ Basic は無視して成功 ⑥ 200 © 2026 Wantedly, Inc.
  3. 原因 - Chromiumを⾒てみる 同じドメインの中なら、ヘッダは外されない Android WebView がリダイレクトのたびに呼ぶ処理 ─ aw_url_loader_throttle.cc(抜粋) void

    AwURLLoaderThrottle::WillRedirectRequest(...) { bool is_same_domain = net::registry_controlled_domains::SameDomainOrHost( redirect_info->new_url, original_origin_, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); if (!is_same_domain) { // The headers we added must be removed. headers_update_params->removed_headers.insert(...); } } 同じドメインの中のリダイレクト → 付けたヘッダを残す © 2026 Wantedly, Inc. 別のドメインへ出るリダイレクト → 付けたヘッダを外す
  4. iOS との違い iOS では起きなかった Android iOS loadUrl(url, headers) load(URLRequest) 同じドメインの中なら、リダイレクトの先にも

    ホストが変わる リダイレクトで Authorization 付く。 を落とす。 © 2026 Wantedly, Inc.
  5. 直し⽅ 本番でも、ヘッダなしで開き直す WebView トークン→Cookie ⽬的のページ エンドポイント SSR 上流 API ①

    loadUrl + Bearer ② 302 + Set-Cookie shouldOverrideUrlLoading ⽌めて読み直す(本番でも) ③ loadUrl(Cookie あり、Bearer は外した) ④ Cookie で問い合わせ ⑤ 成功 ⑥ 200 © 2026 Wantedly, Inc.
  6. まとめ 01 02 03 リダイレクト先にも届く 外すなら、読み直す 環境差分を認識する 同じドメインの中なら、 リダイレクトを⽌めて、必 環境独⾃の設定があり、完

    loadUrl のヘッダは外され 要なヘッダだけで loadUrl 全に本番の保証にならない ない。 し直す。 ことがある。 © 2026 Wantedly, Inc.